Javascript 按数组筛选包含对象数组的对象数组
我正在尝试筛选数组,但未能成功筛选对象内部的数组 我将给我们举一个阵列的示例:Javascript 按数组筛选包含对象数组的对象数组,javascript,arrays,Javascript,Arrays,我正在尝试筛选数组,但未能成功筛选对象内部的数组 我将给我们举一个阵列的示例: const data = [ { path: 'data1', main: [ { path: 'mainData11' }, { path: 'mainData12' } ] }, { path: 'data2', main: [ { pa
const data = [
{
path: 'data1',
main: [
{
path: 'mainData11'
},
{
path: 'mainData12'
}
]
},
{
path: 'data2',
main: [
{
path: 'mainData21'
},
{
path: 'mainData22'
}
]
}
];
const filterArray = ['data1', 'mainData12'];
预期结果
const data = [
{
path: 'data1'
main: [
{
path: 'mainData12'
}
]
}
]
我尝试过的
data.filter(el => filterArray.includes(el.path))
我没有成功过滤main
内部对象
我怎么做到的
谢谢
**更新--当前解决方案
data.reduce((results, item) => {
if(filterArray.some(f => item.path === f)){
results.push(
{
...item,
path: item.path,
main: item.main.filter(i => filterArray.some(f => i.path === f))
}
)
};
return results;
}, []);
如果使用reduce,这可以一步完成
const数据=[
{
路径:“数据1”,
主要内容:[
{
路径:“mainData11”
},
{
路径:“mainData12”
}
]
},
{
路径:“数据2”,
主要内容:[
{
路径:“mainData21”
},
{
路径:“maindat22”
}
]
}
];
常量filterArray=['data1','mainData12'];
const results=data.reduce((结果,项目)=>{
if(filterray.some(f=>item.path==f)和&item.main.some(i=>filterray.some(f=>i.path==f))){
结果:推(
{path:item.path,main:item.main.filter(i=>filterray.some(f=>i.path==f))}
);
}
返回结果;
}, []);
console.log(结果)
您可以通过重建对象来解决此问题:
const数据=[{
路径:“数据1”,
主要内容:[{
路径:'maindat11',
},
{
路径:“mainData12”,
},
],
},
{
路径:“数据2”,
主要内容:[{
路径:'maindat21',
},
{
路径:'maindat22',
},
],
},
];
常量filterArray=['data1','mainData12'];
常量filteredData=数据
.filter(条目=>entry.path===filterArray[0])
.map(条目=>({
path:entry.path,
main:entry.main.filter(x=>x.path===filterArray[1]),
}))
.filter(entry=>entry.main.length);
console.log(filteredData)代码>谢谢你的提醒。问题在于过滤器阵列
元素位置不固定。示例data1
可以位于位置3。如果存在,我必须在该数组中搜索以搜索筛选器数组。是的,这是重建对象的当前解决方案。应该使用reduce在一次迭代中完成过滤器和映射,否则将多次迭代集合。