You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在深度嵌套的对象数组中进行过滤查询

解决深度嵌套对象数组的属性过滤问题

实现思路

你的数据结构中,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:00:01