所以我有一个这样的数组:
var arr=[one, lol];
和像这样的对象
var obj={
one:{
lol:11234
}
}
如果我做obj [lol]我怎么做到那么它会打印出11234?请记住,我不知道数组有多长,而像console.log(obj [one] [lol])这样的答案是行不通的。提前谢谢。
答案 0 :(得分:1)
您可以存储以前属性的值(最初为obj
)并继续循环直到数组结束,如下所示:
var arr = ['one', 'two', 'three'];
var obj = {
one: {
two: {
three: 11234
}
}
}
var currentProp = obj;
for(var i = 0; i < arr.length; i++) {
currentProp = currentProp[arr[i]];
}
console.log(currentProp);
&#13;
上面的代码将从对象obj
开始,然后循环直到数组的长度,然后将currentProp
重新分配给数组中的下一个属性。在这种情况下,这就是它的作用:
obj[arr[0]]
one
,并将其分配给currentProp
obj[arr[0]][arr[1]]
或one[arr[1]]
,即two
,并将其分配给currentProp
obj[arr[0]][arr[1]][arr[2]]
或two[arr[2]]
,three
,并将其分配给currentProp
。然后循环终止,因为它已到达列表的末尾。最后,最后一个属性的值将在currentProp
,并将正确输出11234。
答案 1 :(得分:0)
答案 2 :(得分:0)
由于您只是查找属性值,因此更容易:
console.log(obj.one.lol);
使用方括号按照你的方式来做它JS认为一个和LOL都是变量。除非你用引号括起来。
console.log(obj['one']['lol');
除非您创建一个重构obj对象的函数或者将obj.one作为属性提供给它的函数,否则您将无法获得正在查找的值。
答案 3 :(得分:0)
您可以使用Array#reduce
,因为这会返回您需要的对象,而不会在外面保留引用。
function set(object, path, value) {
var last = path.pop();
path.reduce(function (o, k) {
return o[k] = o[k] || {};
}, object)[last] = value;
}
var obj = {};
set(obj, ['one', 'lol'], '11234');
console.log(obj);