我有一个对象说obj
。我需要搜索一个属性obj.property
,如果它不在undefined
中搜索obj.parent.property
。如果没有搜索在obj.parent.parent.property
等等......直到我得到那个属性
喜欢这个..
obj.property [undefined]
obj.parent.property [undefined]
obj.parent.parent.property [undefined]
obj.parent.parent.parent.property [found] .Terminate here.
答案 0 :(得分:1)
您可以使用for...in
循环来创建递归函数,该函数将搜索所有嵌套对象以查找指定属性并返回其值。
var obj = {lorem: {ipsum: {a: {c: 2}, b: 1}}}
function getProp(obj, prop) {
for (var i in obj) {
if (i == prop) return obj[i]
if (typeof obj[i] == 'object') {
var match = getProp(obj[i], prop);
if (match) return match
}
}
}
console.log(getProp(obj, 'b'))

答案 1 :(得分:0)
您可以通过检查属性是否存在来使用递归方法,否则使用父键再次调用iter
。
function iter(object) {
return 'property' in object ? object.property : iter(object.parent);
}
var object = { parent: { parent: { parent: { parent: { property: 42 } } } } };
console.log(iter(object));

答案 2 :(得分:0)
您需要仔细检查每个级别的属性。检查这个答案: