首页 > 解决方案 > 如何过滤嵌套数组(组成JS过滤器)

问题描述

我试图返回一个根据对象的子属性过滤的新数组。

我正在尝试将两个过滤器嵌套在一起以实现此结果。

let header = "xyz";

let data = [{
  "header": header,
  items: [{
    id: 1,
    status: "Y"
  }, {
    id: 2,
    status: "N"
  }, {
    id: 3,
    status: "N"
  }]
},{
  "header": header,
  items: [{
    id: 1,
    status: "N"
  }, {
    id: 2,
    status: "Y"
  }]
}];

let result = data.filter(item => {
  return item.items.filter(item => {
    return item.status === "Y";
  })
});

预期产出

[{
  "header": header,
  items: [{
    id: 1,
    status: "Y"
  }]
},{
  "header": header,
  items: [{
    id: 2,
    status: "Y"
  }]
}];

如何在哪里过滤原始数组status === 'Y'

标签: javascriptarrays

解决方案


您可以先映射以获取具有过滤子项的等效数组,然后过滤主数组以删除没有子项的元素。

let result = data.map(item => {
    return {
        header: item.header,
        items: item.items.filter(subItem => subItem.status === 'Y')
    };
}).filter(item => item.items.length);

推荐阅读