繁体   English   中英

object 的过滤器数组,其中包含一个数组的对象数组

[英]filter array of object which contains array of objects by an array

我正在尝试过滤数组,但无法成功过滤 object 中的数组

我将举一个数组的例子:

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))

我没有成功过滤object里面的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;
}, []);

您可以通过重建 object 来解决它:

 const data = [{ path: 'data1', main: [{ path: 'mainData11', }, { path: 'mainData12', }, ], }, { path: 'data2', main: [{ path: 'mainData21', }, { path: 'mainData22', }, ], }, ]; const filterArray = ['data1', 'mainData12']; const filteredData = data.filter(entry => entry.path === filterArray[0]).map(entry => ({ path: entry.path, main: entry.main.filter(x => x.path === filterArray[1]), })).filter(entry => entry.main.length); console.log(filteredData);

如果您使用 reduce,这可以一步完成

 const data = [ { path: 'data1', main: [ { path: 'mainData11' }, { path: 'mainData12' } ] }, { path: 'data2', main: [ { path: 'mainData21' }, { path: 'mainData22' } ] } ]; const filterArray = ['data1', 'mainData12']; const results = data.reduce((results, item) => { if (filterArray.some(f => item.path === f) && item.main.some(i => filterArray.some(f => i.path === f))) { results.push( { path: item.path, main: item.main.filter(i => filterArray.some(f => i.path === f)) } ); } return results; }, []); console.log(results)

暂无
暂无

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

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