在不使用foreach类型脚本的情况下迭代对象数组



Am正在处理一个对象数组。下面给出了结构。

[
{
"matListParent": "CH",
"dParent": "CUST1",
"isAllSelected": true,
"childItems": [
{
"item": "Display1",
"isSelected": true
},
{
"item": "Display2",
"isSelected": false
}
]
},
{
"matListParent": "CH2",
"dimParent": "CUST2",
"isAllSelected": true,
"childItems": [
{
"item": "Display5",
"isSelected": true
},
{
"item": "Display6",
"isSelected": false
}
]
}
]

我正在尝试获取isSelectedtrue项目值。我尝试过类似的东西

data.filter(
(matModel: any) => matModel.matListParent === "CH").map(
(model: any) => model.childItems).map((item: any) => item).filter((list: any) => list.isSelected);

它返回一个空数组。

上面的代码有什么错误。

提前谢谢。

解决方案代码

data.filter(
(matModel: any) => matModel.matListParent === "CH").map(
(model: any) => model.childItems).map((item: any) => item[0]).filter((list: any) => list.isSelected);

问题说明

所以,

在第一个filter((matModel: any) => matModel.matListParent === "CH")和第一个map((model: any) => model.childItems)之后,我们得到了一个数组,就像下面一样

[
[
{ item: 'Display1', isSelected: true },
{ item: 'Display2', isSelected: false }
]
]

因此,当您再次尝试将map((item: any) => item)应用于它时,它会给出与上面相同的结果。在那之后,你的最后一个filter((list: any) => list.isSelected)将不会给你任何东西。

上面的解决方案将帮助你,还有很多方法可以解决这个问题,我希望你知道如何克服这个问题,因为现在你知道的错误方向

尝试这个

const data = array
.filter((elem) => elem.matListParent === "CH")
.map(elem => elem.childItems.filter((val) => val.isSelected));

结果:你只得到=

const array = [
{
matListParent: "CH",
dParent: "CUST1",
isAllSelected: true,
childItems: [
{
item: "Display1",
isSelected: true
},
{
item: "Display2",
isSelected: false
}
]
},
{
matListParent: "CH2",
dimParent: "CUST2",
isAllSelected: true,
childItems: [
{
item: "Display5",
isSelected: true
},
{
item: "Display6",
isSelected: false
}
]
}
];
const data = array
.filter((elem) => elem.matListParent === "CH")
.map(elem => elem.childItems.filter((val) => val.isSelected)).flat(Infinity);

console.log(data)

[
{ item: 'Display1', isSelected: true }
]

最新更新