查找属性而不知道它在树中的位置

时间:2016-05-18 15:30:32

标签: javascript

有一个小问题:

p: {
   s: {
     name: 'demo'
   }
},
   x: {
      'something': 'me'
   }
}

如何在不知道对象树中的确切位置的情况下获取名称? 编辑:我如何到达' me' ?

2 个答案:

答案 0 :(得分:0)

您可以递归迭代:

function findByKeyName(obj, keyName) {
    for (var key in obj) {
        if (key === keyName) {
            return obj[key];
        } else {
            if (typeof obj[key] === "object" && obj[key] !== null) {
                return findByKeyName(obj[key], keyName);
            }
        }
    }
}

findByKeyName(obj, "name") //returns "demo"

答案 1 :(得分:-1)

丑陋而真实......



var getValue = (o,p) => JSON.stringify(o).replace(new RegExp('.*?' + p + '":"([^"]*).+'),"$1"),
obj = {
    p: {
       s: {
         name: 'demo'
       }
    }
};
document.write(getValue(obj,"name"));




尽管我的丑陋解决方案完美无缺,但我还是希望为公益事业添加我的递归方法版本。

以下内容将找到搜索到的属性的第一次出现。



p = {
   s: {
     name: 'demo',
   },
   x: {
      'something': 'me'
   },
   y: null,
   z:  {
      'something': 'you'
   }
};

var getValue = (o,v) => {
  var ok = Object.keys(o),
       f = false,
       i = 0;
  while (!f && i < ok.length) {
  	o[ok[i]] !== null && typeof o[ok[i]] === "object" && (f = getValue(o[ok[i]],v));
  	i++;
  }
  return o[v] || f;
};
document.write(getValue(p,"something"));
&#13;
&#13;
&#13;

以下内容将找到搜索到的属性的最后一次出现

&#13;
&#13;
p = {
   s: {
     name: 'demo',
   },
   x: {
      'something': 'me'
   },
   y: null,
   z:  {
      'something': 'you'
   }
};

var getValue = (o,v) => {
  var ok = Object.keys(o),
       f = false,
       i = 0;
  while (!o[v] && i < ok.length) {
  	o[ok[i]] !== null && typeof o[ok[i]] === "object" && (f = getValue(o[ok[i]],v));
  	i++;
  }
  return o[v] || f;
};
document.write(getValue(p,"something"));
&#13;
&#13;
&#13;