如何筛选嵌套数组含特定字符串的JavaScript多维数组对象
筛选嵌套数组中符合条件的对象
问题说明
需要筛选大型多维数组,保留那些嵌套数组c中至少存在一个对象的键d等于"d3.1"的外层对象,尝试过.some和.filter但未成功实现。
原始数组
const arr = [ {a:"a1",b:"b1",c:[{d:"d1.1",e:"e1.1"},{d:"d1.2",e:"e1.2"}]}, {a:"a2",b:"b2",c:[{d:"d2.1",e:"e2.1"},{d:"d2.2",e:"e2.2"}]}, {a:"a3",b:"b3",c:[{d:"d3.1",e:"e3.1"},{d:"d3.2",e:"e3.2"}]}, {a:"a4",b:"b4",c:[{d:"d4.1",e:"e4.1"},{d:"d4.2",e:"e4.2"}]}, {a:"a1",b:"b1",c:[{d:"d1.1",e:"e1.1"},{d:"d3.1",e:"e1.2"}]}, {a:"a5",b:"b5",c:[{d:"d3.1",e:"e3.1"},{d:"d3.2",e:"e3.2"}]} ]
期望输出
[ {a:"a3",b:"b3",c:[{d:"d3.1",e:"e3.1"},{d:"d3.2",e:"e3.2"}]}, {a:"a1",b:"b1",c:[{d:"d1.1",e:"e1.1"},{d:"d3.1",e:"e1.2"}]}, {a:"a5",b:"b5",c:[{d:"d3.1",e:"e3.1"},{d:"d3.2",e:"e3.2"}]} ]
解决方案
直接组合使用.filter和.some即可实现需求,核心逻辑如下:
- 用
.filter遍历外层数组,筛选出符合条件的对象 - 对每个外层对象,用
.some检查其c数组中是否存在d === "d3.1"的对象
实现代码
const filteredArr = arr.filter(item => { return item.c.some(obj => obj.d === "d3.1"); }); console.log(filteredArr);
代码说明
arr.filter(...):遍历外层数组,仅保留返回值为true的元素item.c.some(...):检查当前外层对象的c数组,只要有一个对象的d属性等于"d3.1",就返回true,该外层对象会被保留到结果中
运行这段代码后,输出结果与期望完全一致。
内容的提问来源于stack exchange,提问作者Robin Banks
相关产品推荐
相关产品推荐

