我有一个对象,我想访问它:
obj['example']['example-2']['example-3'];
问题是我有一个存储这些密钥的数组:
arr = ['example', 'example-2', 'example-3'];
但是这个数组可以是可变长度的,所以也许只有3个键可能有6个。 如何在不对每种情况进行硬编码的情况下实现此目的,例如:
if(arr.length == 1){
//obj[arr[0]];
}else if (arr.length == 2){
//obj[arr[0]][arr[1]];
}
等。
答案 0 :(得分:1)
您可以使用路径并缩小对象。
function getValue(o, path) {
return path.reduce(function (o, k) {
return (o || {})[k];
}, o);
}
var obj = { example: { 'example-2': { 'example-3': 42 } } },
arr = ['example', 'example-2', 'example-3'];
console.log(getValue(obj, arr));
答案 1 :(得分:1)
对于其他人,如果您不想使用reduce,则可以使用简单的for循环。
function getNestedValue(obj, keys) {
var ret = obj[keys[0]];
for (var i = 1; i < keys.length; i++) {
ret = ret[keys[i]];
}
return ret;
}
var ob = {
HelloWorld: {
James: {
Ted: 55
}
}
};
var depth = ["HelloWorld", "James", "Ted"];
&#13;
答案 2 :(得分:0)
您可以使用此object-dig package:
这允许您在JavaScript中使用Ruby的hash #dig等方法。
var dig = require('object-dig');
var object = { a: { b: { c: 'c' } } };
dig(object, 'a', 'b');
// => { c: 'c' }
dig(object, 'a', 'b', 'c');
// => 'c'
dig(object, 'a', 'unknownProp', 'c');
// =>undefined