我有一系列的字符串作为一条路径'到JavaScript对象的某个属性:
var car = {
"owner": "Joe",
"model": {
name: "Ford",
"manufacturer": {
"founder": "Henry Ford"
}
}
};
var address = ["model", "manufacturer", "founder"];
我想编写一个函数,它将使用该地址来查找位于路径末尾的对象的属性,在示例中,返回" Henry Ford"。我希望该函数能够处理任意长度的地址。这个功能会是什么样的?
答案 0 :(得分:1)
您可以使用.reduce()
var value = address.reduce(function(o, name) { return o && o[name]; }, car);
.reduce()
函数以一个初始的“累加器”值开始,该值将是car
对象。它遍历数组,传入每个值并期望返回下一个累加器值。每个步骤只查找属性值并返回它,或者累加器本身它是假的。
答案 1 :(得分:1)
这将处理搜索失败的情况。此外,只需查看代码即可轻松理解。
输入:对象,数组
输出:找到键,否则为null
function searchObject(root, pathArray) {
var node = root;
for(var index in pathArray) {
key = pathArray[index];
if(key in node) {
node = node[key];
} else {
node = null;
break;
}
}
return node;
}
示例:
var car = {
"owner": "Joe",
"model": {
name: "Ford",
"manufacturer": {
"founder": "Henry Ford"
}
}
};
和
var address = ["model", "manufacturer", "founder"];
然后searchObject(car, address)
返回“亨利福特”。
答案 2 :(得分:0)
尝试......
function getValue(ob, address) {
result = ob;
for (var i=0,len=address.length; i<len; i++) {
result = result[address[i]];
}
return result;
}
这应该返回地址列表末尾的对象或值。