使用数组中的键访问对象

时间:2017-02-07 12:31:09

标签: javascript

我有一个对象,我想访问它:

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]];
} 

等。

3 个答案:

答案 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;
&#13;
&#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