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 }
]