过滤器数组中的数组,仅获取过滤后的项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了过滤器数组中的数组,仅获取过滤后的项相关的知识,希望对你有一定的参考价值。

我有以下名为过滤器的数组,并尝试按选定的项目对其进行过滤。最后,我希望所有过滤器都位于选定项目的位置,但仅限于选定的项目

let filters = [
  
    id: 0,
    name: 'property',
    items: [
      
        id: 0,
        name: 'x',
        isSelected: false
      ,
      
        id: 1,
        name: 'y',
        isSelected: true
      
    ]
  ,
  
    id: 1,
    name: 'property2',
    items: [
      
        id: 0,
        name: 'x',
        isSelected: true
      ,
      
        id: 1,
        name: 'y',
        isSelected: false
      
    ]
  
]

我想在末尾得到以下数组:

let filteredFilters = [
  
    id: 0,
    name: 'property',
    items: [
      
        id: 1,
        name: 'y',
        isSelected: true
      
    ]
  ,
  
    id: 1,
    name: 'property2',
    items: [
      
        id: 0,
        name: 'x',
        isSelected: true
      
    ]
  
]

我尝试了以下代码,但是不起作用。

let filteredFilters = filters.filter(filter => 
    return filter.items.filter(item => 
       return item.isSelected === true;
  )
)
答案

由于要处理嵌套数组,因此需要map + filter

let filters = [
  
    id: 0,
    name: 'property',
    items: [
      
        id: 0,
        name: 'x',
        isSelected: false
      ,
      
        id: 1,
        name: 'y',
        isSelected: true
      
    ]
  ,
  
    id: 1,
    name: 'property2',
    items: [
      
        id: 0,
        name: 'x',
        isSelected: true
      ,
      
        id: 1,
        name: 'y',
        isSelected: false
      
    ]
  
]


let filteredFilters = 
    filters.map(
        (items, ...rest) => (...rest, items: items.filter(item => item.isSelected))
    )
    .filter(x => x.items.length > 0);

console.log(filteredFilters);

以上是关于过滤器数组中的数组,仅获取过滤后的项的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 中获取过滤后的 ngRepeat 数组的长度?

仅包含特定单词的过滤器数组[重复]

数组过滤后的重新排序问题

过滤器-filter

如何在 es6 中仅比较和过滤两个对象数组中不匹配的数组

使用 MongoDB 中的文档属性过滤器获取嵌入数组中的扁平文档数组