使用基于嵌套值的数组过滤对象数组
我正在尝试基于一些嵌套对象来过滤数组。
输入数组如下所示:
let arrayOfElements = [
{
"name": "a",
"subElements":
[
{"surname": 1},
{"surname": 2}
]
},
{
"name": "b",
"subElements":
[
{"surname": 3},
{"surname": 1}
]
},
{
"name": "c",
"subElements":
[
{"surname": 2},
{"surname": 5}
]
}
];
我希望这种情况的输出如下所示:
let filteredArray = [
{
"name": "a",
"subElements":
[
{"surname": 1}
]
},
{
"name": "b",
"subElements":
[
{"surname": 1}
]
}
];
我正在使用此公式来做到这一点:
let filteredArray = arrayOfElements.filter((element) => element.subElements.some((subElement) => subElement.surname === 1));
输出几乎是好的,但它返回的对象带有所有带有姓氏的对象(最好检查一下小提琴:D),而不是将其删除。我如何改善过滤?
回答:
调用之后filter
,您需要将结果通过管道传递到map
,如下所示:
let filteredArray = arrayOfElements .filter((element) =>
element.subElements.some((subElement) => subElement.surname === 1))
.map(element => {
let newElt = Object.assign({}, element); // copies element
return newElt.subElements.filter(subElement => subElement.surname === '1');
});
我在这里假设您不想操纵原始数组。因此,我正在使用Object.assign。
以上是 使用基于嵌套值的数组过滤对象数组 的全部内容, 来源链接: utcz.com/qa/407947.html