我假设c
数组中保存的键数是未知的。
我喜欢.reduce()
评论中给出的解决方案,但这里有一个详细的演练需要发生的事情,以便您理解。
// Your initial data
var a = {one: 1, two: 2, three: {four: 4, five: 5}};
var c = ['three', 'four'];
// New variable to store the result. We start it off with the `a` object
var result = a;
// Loop the property names
for (var i = 0; i < c.length; i++) {
// Grab the property at the current array index
var key = c[i];
// Get the value using the key and the current `result` object
var new_obj = result[key];
// Overwrite the current `result` object with the new value we got from the key
result = new_obj;
// Break the loop if we ran out of data
if (result == null)
break;
}
所以基本上我们只是循环键,在每次迭代中从当前对象中获取一个值,并用新值覆盖当前对象。
当循环完成时,希望我们已经遍历到我们想要的点。
一个不太冗长的版本可能如下所示:
var result = a;
for (var i = 0; i < c.length; i++) {
result = result[c[i]];
if (result == null)
break;
}