Javascript 在5级中筛选嵌套对象数组

Javascript 在5级中筛选嵌套对象数组,javascript,Javascript,我正在尝试使用.filter筛选此数组 var对象列表=[ { “名称”:“Object0Name”, “id”:“Object0ID”, “对象列表”:[ { “id”:“Object1id_A1”, “名称”:“Object1Name_A1”, “Object2List”:[ { “id”:187, “名称”:“Object2Name_A1”, “Object3List”:[ { “id”:“哺乳动物”, “名称”:“哺乳动物”, “Object4List”:[ { “id_客户端”:“兔

我正在尝试使用.filter筛选此数组

var对象列表=[
{
“名称”:“Object0Name”,
“id”:“Object0ID”,
“对象列表”:[
{
“id”:“Object1id_A1”,
“名称”:“Object1Name_A1”,
“Object2List”:[
{
“id”:187,
“名称”:“Object2Name_A1”,
“Object3List”:[
{
“id”:“哺乳动物”,
“名称”:“哺乳动物”,
“Object4List”:[
{
“id_客户端”:“兔子”,
“货币”:“欧元”
},
{
“id_客户端”:“cat”,
“货币”:“欧元”,
},
{
“id_客户端”:“老虎”,
“货币”:“欧元”,
}
]
}
]
}
]
},
{
“id”:“Object1id_B1”,
“名称”:“Object1Name_B1”,
“Object2List”:[
{
“id”:189,
“名称”:“Object2Name_B1”,
“Object3List”:[
{
“id”:“鱼”,
“名字”:“鱼”,
“Object4List”:[
{
“id_客户”:“虎鲨”,
“货币”:“欧元”,
},
{
“id_客户”:“金枪鱼”,
“货币”:“英镑”,
},
]
}
]
}
]
}
]
}
]
var response=objList.filter(函数(Object0List){
返回Object0List.Object1List.filter(函数(Object1List){
返回Object1List.Object2List.filter(函数(Object2List){
返回Object2List.Object3List.filter(函数(Object3List){
返回Object3List.Object4List.filter(函数(Object4List){
返回Object4List.id_client==“老虎鲨”;
});
});
});
});
});
var myJSON=JSON.stringify(响应);
console.log('动物是:');

log(myJSON)我假设您的每个对象都具有以下结构:

  {
   id: "sth",
   name: "whatever"
   children: [ /***/ ]
  }
因此,递归过滤非常容易:

 function filter(arr, search){
   const result = [];
   for(const {name, id, children} of arr){
     children = filter(children, search);
     if(children.length || id === search)
       result.push({id, name, children });
   }
   return result;
 }
可用作:

  var response = filter(objList, "tiger shark");

您可以检查作为数组的每个属性,并仅获取过滤后的值

这种方法会对原始数组进行变异

函数过滤器(数组、值){
var temp=array.filter(o=>
Object.key(o).some(k=>{
var t=过滤器(Array.isArray(o[k])?o[k]:[],值);
if(o[k]==值){
返回true;
}
if(t&&Array.isArray(t)&&t.length){
o[k]=t;
返回true;
}
})
);
if(温度长度){
返回温度;
}
}
var数组=[{name:“Object0Name”,id:“Object0ID”,Object1List:[{id:“Object1id_A1”,name:“Object1Name_A1”,Object2List:[{id:187,name:“Object2Name_A1”,Object3List:[{id:“哺乳动物”,name:“哺乳动物”,Object4List:[{id:“兔子”,货币:“欧元”},{id:“猫”,货币:“欧元”},{id:“老虎”,货币:“欧元”},{id:“Object1id_B1”,名称:“Object1Name_B1”,Object2List:[{id:189,名称:“Object2Name_B1”,Object3List:[{id:“鱼”,名称:“鱼”,Object4List:[{id:“虎鲨”,货币:“欧元”},{id:“金枪鱼”,货币:“英镑”}],
结果=过滤器(数组“虎鲨”);
console.log(结果);

作为控制台包装{max height:100%!important;top:0;}
您想要获取什么?包含搜索词及其父对象的所有对象?您想要获取tiger shark和所有Parrent?为什么要将键命名为
“Object1List”、“Object2List”“
而不仅仅是
儿童”
?嗨,乔纳斯W和阿图尔。是的,我想获取所有包含搜索词及其父项的对象。我不知道。您可以随意调用它,它也是有效的children1list和Children2List非常感谢您的回复,但是id的名称不同,因此不能递归。在这个例子中,我错了,我命名了所有相同的id,我现在已经更改了它(在Object4List中,id现在是name id_client)。我对这个错误感到非常抱歉。Hi Nina,您的函数是有效的,非常感谢。