如何在深度嵌套的对象数组中进行过滤查询
解决深度嵌套对象数组的属性过滤问题
实现思路
你的数据结构中,foo.fruits是数组,每个元素是仅含单个键(如fruit1)的对象,对应的值又是数组,目标属性_speciality藏在capacity数组的对象里。我们需要遍历外层数组,提取每个元素的键,再深入嵌套结构检查属性是否符合条件,最后收集符合要求的键名。
代码实现
const foo = { "fruits": [ { "fruit1": [{ "categories": { "shape": "square", "size": "large"}, "factories": [{ "city": "delhi", "location": "23 new road"}], "capacity": [{ "weight": "10kg", "_speciality": "can fly"}] }] }, { "fruit2": [{ "categories": { "shape": "round", "size": "small"}, "factories": [{ "city": "bombay", "location": "13 new road"}], "capacity": [{ "weight": "14kg", "_speciality": "can sing"}] }] }, { "fruit3": [{ "categories": { "shape": "rectangle", "size": "medium"}, "factories": [{ "city": "bombay", "location": "13 new road"}], "capacity": [{ "weight": "14kg", "_speciality": "can fly"}] }] } ] }; // 筛选出_speciality为'can fly'的项名称 const result = foo.fruits.filter(item => { // 获取当前项的唯一键(如fruit1) const fruitKey = Object.keys(item)[0]; // 拿到对应的数据对象 const fruitData = item[fruitKey][0]; // 检查capacity数组中是否存在符合条件的_speciality return fruitData.capacity.some(cap => cap._speciality === 'can fly'); }).map(item => Object.keys(item)[0]); console.log(result); // 输出: ["fruit1", "fruit3"]
代码说明
- filter遍历外层数组:筛选出包含目标属性的
fruits元素 - Object.keys(item)[0]:提取每个元素的唯一键名(每个元素仅含一个键值对)
- fruitData.capacity.some(...):用
some方法检查capacity数组中是否存在_speciality等于'can fly'的对象,只要有一个符合就返回true - map转换结果:把筛选后的元素转换成对应的键名,得到最终的
fruit1和fruit3
内容的提问来源于stack exchange,提问作者Uday Thakur
相关产品推荐
相关产品推荐

