1

我有以下数组

var testArray = ["test1", "test2", "test3"];

obj其中有其他对象的

var obj.test1.test2.test3 = "test";

我想测试 testArray

并得到以下

obj[testArray[0]][testArray[1]][testArray[2]]

或者obj["test1"]["test2"]["test3"]

这等于obj.test1.test2.test3并将返回“测试”

4

3 回答 3

2

正如您所说,您知道,我们可以利用obj["test1"]符号将自己更深地嵌套到目标对象中。在这种情况下,在每次迭代中,我们将我们所指向的“顶部”重新分配为最后一次迭代的子项。

var obj = { test1: { test2: {test3: 'test' }}};
var current = obj;

var arr = ['test1', 'test2', 'test3'];
for(var i = 0; i < arr.length; i++){
    if(current === undefined){ break; }
    current = current[arr[i]];
}

console.log(current);
于 2013-03-27T12:36:27.713 回答
0

这个怎么样:

var testArray = ["test1", "test2", "test3"];
var value = [obj].concat(testArray).reduce(function(prev, curr) {
     return prev[curr];
});

但请记住, IE <= 8(减少参考reduce)不支持。

于 2013-03-27T12:38:35.090 回答
0
function extractDeep(obj, propPathArr) {
   var prop = obj;
   propPathArr.forEach(function (item) {
      prop = prop[item];
   });
   return prop;
}

像这样打电话:

alert(extractDeep({a: {b: {c: "The property!"}}}, ['a', 'b', 'c']));

笔记:

  • 你真的应该添加一些错误检查。
  • forEach不适用于所有浏览器

jsFiddle 可以在这里找到

于 2013-03-27T12:42:06.333 回答