A正在尝试返回一个根据对象的子属性过滤的新数组。
我正在尝试将两个过滤器嵌套在一起以实现此结果。
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'
处过滤原始数组?
答案 0 :(得分:2)
您可以先映射以获得具有已过滤子项的等效数组,然后过滤主数组以删除没有子项的元素。
let result = data.map(item => {
return {
header: item.header,
items: item.items.filter(subItem => subItem.status === 'Y')
};
}).filter(item => item.items.length);
答案 1 :(得分:1)
要获得预期结果,请使用以下使用reduce的选项
工作代码
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"
}]
}];
console.log(data.reduce((acc,v) => {
v. items = v.items.filter(item => {
return item.status === "Y";
})
acc.push(v)
return acc
}, []))