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在一次迭代中完成过滤器和映射,否则将多次迭代集合。