Javascript:找到最深的对象并从中返回一个值?

时间:2016-10-06 15:57:07

标签: javascript

没有Jquery,我如何在对象数组中找到最深的对象?

所以我有一个对象,可以有很多孩子,有时是1个孩子,有时是10个孩子,每个孩子都可能有几个孩子。

我想找一下这个属性'标签'单个最深的对象是并返回。

我不想找到具有标签属性的最深的对象,这是不同的;我想找到绝对最深的对象,然后返回标签属性所说的内容(有时可能是空白或不存在)。

有什么想法吗?

编辑: 总是是最深的对象,永远不会有偶数个孩子到起始主对象

EDIT2: 我没有类似工作代码的东西,但这里有更多的描述:

Object1 = ({ label: Hello, friend: Object2 }) 
Object2 = ({ label: HJM });

我想要的结果是HJM

编辑3:更复杂的数据集

var data = [
    {label:1 },
    {John:2 },
    {Jack:3 },
    {label:4, friend: [
        {label:5 },
        {label:6 },
        {Alex:7 , friend: [
            {label:8 }]
    ]}
];

myMagicFunction(data)的结果最好是' 8'

1 个答案:

答案 0 :(得分:0)

function getDeepestObject(obj){
  var children = [];
  Object.keys(obj).forEach(function(key){
    if(typeof obj[key] === 'object' && obj[key]) 
      children.push(getDeepestObject(obj[key]));
  });
  if(!children.length){ return { obj:obj, level:0 }; }
  else { 
     var deepestChild = {level:-1};
     children.forEach(function(child){
       if(child.level > deepestChild.level)
         deepestChild = child; 
     });
     return deepestChild;
  }
}


var o = {
  e: {
      f: {
         j: { label: 'hello'}
      },
      r: {}
   },
   a: {
      l:{}
   },
   r: {}
}

console.log(getDeepestObject(o).obj.label)