JavaScript - 从一个字符串数组中访问对象的嵌套属性

4
我有一个像这样的对象
{
  metadata: {
    correlationId: 'b24e9f21-6977-4553-abc7-416f8ed2da2d',
    createdDateTime: '2021-06-15T16:46:24.247Z'
  }
}

我有一个属性数组需要访问

[metadata, correlationId]

如何动态访问对象上的属性?例如:

keys.forEach((key) => {
  object[key][key2] ???
})

由于我不知道我们需要访问对象的深度,因此它需要是动态的。


你期望的输出值是什么样子? - Steve Tomlin
3个回答

4
这里提供一种不需要使用递归的解决方案:
const myObj = {
    a: {
        b: {
            c: "I'm the target"
        }
    }
}
const keys = ['a', 'b', 'c'];

let result = myObj;
for (const key of keys) {
    result = result[key];
}
console.log(result);

或者使用递归:

const finder = (obj, keys, index = 0) => {
    const result = obj[keys[index++]];
    
    if (!result) {
        return obj;
    }
    return finder(result, keys, index);
}

console.log(finder(myObj, keys));

2

这与访问嵌套的JavaScript对象和数组非常相似,只是少了一步 - 您已经以数组形式拥有所需的键。使用.reduce在每次迭代中访问下一个嵌套值。

const obj = {
  metadata: {
    correlationId: 'b24e9f21-6977-4553-abc7-416f8ed2da2d',
    createdDateTime: '2021-06-15T16:46:24.247Z'
  }
};
const keys = ['metadata', 'correlationId'];

const result = keys.reduce((a, key) => a[key], obj);
console.log(result);


0

这是我解决你的问题的想法。告诉我,如果对你没问题。

let x = {
  metadata: {
    correlationId: 'b24e9f21-6977-4553-abc7-416f8ed2da2d',
    createdDateTime: '2021-06-15T16:46:24.247Z'
  }
}

let fun = x => typeof x === 'string' ? console.log(x) : Object.keys(x).map( y => fun(x[y]));

fun(x);


我非常确定他正在寻找一种递归算法来处理任何深度的问题。 - Robo Robok
啊,好的,我明白了,等一下。 - Κωλζαρ
请检查这段代码,它是否更好?现在它是递归的。 - Κωλζαρ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接