我正在尝试基于一些嵌套对象来过滤数组。
输入数组如下所示:
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,如下所示:
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。