我尝试过滤一个数组,基于一些嵌套对象。我准备了一些Fiddle
输入数组如下所示:
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),而不是削减他们了。
8条答案
按热度按时间a0zr77ik1#
这样,您可以在数组中进行任意深度的筛选,并在任何级别筛选元素,
Spread运算符将扩展
element
,然后过滤的subElements
将覆盖元素中的subElements
。jhiyze9q2#
调用
filter
之后,需要将结果通过管道传输到map
,如下所示:这里我假设你不想操作原始数组,所以我使用Object.assign。
hkmswyz63#
tpxzln5u4#
只是改进了上面的答案
kkih6yb85#
尝试此解决方案:
aamkag616#
您也可以使其通用:
逻辑
subElements
值设置为过滤列表。样品
**注:**箭头函数用于保持
this
的引用。如果您不在函数内部使用this
,也可以使用普通函数。8qgya5xd7#
mcdcgff08#
更准确地说