简体   繁体   English

从嵌套的复杂对象中获取特定对象

[英]Getting particular object from nested complex object

I have a below json, want to get object whose id = 111 , depth may vary depending upon the json. 我有一个下面的json,想要获取id = 111的对象,深度可能取决于json。

object = [ 
           { 
             id= 1,
             name : 'a',
             childNodes : [ {
                            id=11,
                            name:'aa',
                            childNodes:[{
                                         id: 111,
                                         name:'aaaa',
                                         childNodes:[]
                                        }]
                       }]

           }]

required output { id: 111, name:'aaaa', childNodes:[] } 必需的输出{ id: 111, name:'aaaa', childNodes:[] }

Looking for fastest algorithm or method. 寻找最快的算法或方法。 Data would be really huge of more then 35000 nodes and depth upto 20. 数据超过35000个节点,深度最多可达20个,将是一个巨大的数据。

Any help would be appreciated. 任何帮助,将不胜感激。

You can create recursive function for this using for...in loop. 您可以使用for...in循环为此创建递归函数。

 var object = [{"id":1,"name":"a","childNodes":[{"id":11,"name":"aa","childNodes":[{"id":111,"name":"aaaa","childNodes":[]}]}]},{"id":2,"name":"a","childNodes":[{"id":22,"name":"aa","childNodes":[{"id":123,"name":"aaaa","childNodes":[]}]}]}] function findById(data, id) { for(var i in data) { var result; if(data.id == id) return data if(typeof data[i] == 'object' && (result = findById(data[i], id))) return result } } console.log(findById(object, 111)) console.log(findById(object, 22)) 

Here is a recursive function using some : 这是使用some递归函数:

 function findNested(arr, id) { var res; return arr.some(o => res = Object(o).id === id ? o : findNested(o.childNodes, id) ) && res; } var object = [{ id: 1, name : 'a', childNodes : [ { id: 11, name:'aa', childNodes:[{ id: 111, name:'aaaa', childNodes:[] }] }] }]; console.log(findNested(object, 111)); console.log(findNested(object, 9)); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM