javascript从字符串数组构造一个对象

时间:2013-03-27 12:31:59

标签: javascript algorithm

我有以下数组

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”

3 个答案:

答案 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无法在所有浏览器中使用

jsFiddle can be found here