Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从嵌套的复杂对象获取特定对象_Javascript_Performance_Underscore.js_Lodash_Javascript Objects - Fatal编程技术网

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

Javascript 从嵌套的复杂对象获取特定对象,javascript,performance,underscore.js,lodash,javascript-objects,Javascript,Performance,Underscore.js,Lodash,Javascript Objects,我有一个下面的json,想要得到id=111的对象,深度可能因json而异 object = [ { id= 1, name : 'a', childNodes : [ { id=11, name:'aa', childNode

我有一个下面的json,想要得到id=111的对象,深度可能因json而异

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

           }]
所需输出
{id:111,名称:'aaaa',子节点:[]}

寻找最快的算法或方法。数据将非常庞大,超过35000个节点,深度可达20


任何帮助都将不胜感激。

您可以使用
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”:[]}]}]}]
函数findById(数据,id){
用于(数据中的var i){
var结果;
if(data.id==id)返回数据
if(type of data[i]=“object”&(result=findById(data[i],id)))返回结果
}
}
console.log(findById(object,111))

log(findById(object,22))
您可以使用
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”:[]}]}]}]
函数findById(数据,id){
用于(数据中的var i){
var结果;
if(data.id==id)返回数据
if(type of data[i]=“object”&(result=findById(data[i],id)))返回结果
}
}
console.log(findById(object,111))

log(findById(object,22))
这里是一个递归函数,使用
some

函数findNested(arr,id){
var-res;
返回arr.some(o=>res=Object(o).id==id?o
:findNested(o.childNodes,id))&&res;
}
变量对象=[{
id:1,
名称:‘a’,
子节点:[{
id:11,
姓名:'aa',
子节点:[{
id:111,
名称:"aaaa",,
子节点:[]
}]
}]
}];
log(findNested(object,111));

log(findNested(object,9))这里有一个递归函数,它使用了
some

函数findNested(arr,id){
var-res;
返回arr.some(o=>res=Object(o).id==id?o
:findNested(o.childNodes,id))&&res;
}
变量对象=[{
id:1,
名称:‘a’,
子节点:[{
id:11,
姓名:'aa',
子节点:[{
id:111,
名称:"aaaa",,
子节点:[]
}]
}]
}];
log(findNested(object,111));

log(findNested(object,9))对象中是否存在任何可预测的结构?例如,如果父母的ID以1开头,孩子的ID以1开头,我们不能断言或依赖于此。关于结构唯一可以确定的是,它们都是唯一的ID,还是您希望返回一个包含所有具有匹配ID的对象的数组?是的,它们是唯一的ID,并且正在查找具有特定ID的对象。对象中是否有任何可预测的结构?例如,如果父项的ID以1开头,子项的ID以1开头,很抱歉,我们不能断言或依赖于此。关于结构,唯一确定的是它们都是唯一的ID,还是希望返回一个包含所有具有匹配ID的对象的数组?是的,它们是唯一的ID,我正在寻找具有特定ID的对象。