我有以下数组
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
并返回“test”
答案 0 :(得分: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);
答案 1 :(得分:0)
这个怎么样:
var testArray = ["test1", "test2", "test3"];
var value = [obj].concat(testArray).reduce(function(prev, curr) {
return prev[curr];
});
但请记住,IE&lt; = 8(Reduce reference)不支持reduce
。
答案 2 :(得分: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
无法在所有浏览器中使用