递归搜索对象中的属性

时间:2017-05-18 17:18:50

标签: javascript

我有一个对象说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.

3 个答案:

答案 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)

您需要仔细检查每个级别的属性。检查这个答案:

Iterate through object properties