使用基于嵌套值的数组过滤对象数组

我正在尝试基于一些嵌套对象来过滤数组。

输入数组如下所示:

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

回到顶部