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

如何在嵌套对象数组中搜索关键词?(禁用flatMap)

JavaScript嵌套数组匹配搜索解决方案

需求说明

给定嵌套对象数组,需搜索所有id.name包含关键词“pp”的项,结果需包含:

  • 匹配的父级对象的id
  • 该父级对象嵌套fruits数组中匹配的子级对象的id
    要求不能使用flatMap,修正原有错误实现。

原代码问题分析

原有代码错误使用Array.filter:filter的回调函数需返回布尔值(决定是否保留当前元素),但原代码中试图返回数组,完全违背filter的设计逻辑,导致无法正确收集父级和子级的匹配项。

正确实现方案

通过遍历外层数组,逐个处理父级对象,先收集匹配的父级id,再遍历其fruits数组收集匹配的子级id,最终合并结果:

let arr = [
  {
    id:{key:1, name:"apple"},
    fruits:[{id:{key:1.1,name:"green apple"}},{id:{key:1.2, name: "red apple"}}]
  },
  {
    id:{key:2, name:"grapes"},
    fruits:[{id:{key:2.1,name:"green grapes"}},{id:{key:2.2, name: "black grapes"}}]
  },
  {
    id:{key:3, name:"berries"},
    fruits:[{id:{key:3.1,name:"strawberries"}},{id:{key:3.2, name: "blueberries"}}]
  },
  {
    id:{key:4, name:"banana"},
    fruits:[{id:{key:4.1,name:"yellow banana"}}]
  }
]

const search = "pp"

function filterResult(obj) {
  const re = new RegExp(search, "ig")
  return re.test(obj.id.name)
}

const searchResult = [];

// 遍历外层数组处理每个父对象
arr.forEach(parent => {
  // 父级id匹配则加入结果
  if (filterResult(parent)) {
    searchResult.push(parent.id);
    // 遍历子级fruits收集匹配项
    parent.fruits.forEach(child => {
      if (filterResult(child)) {
        searchResult.push(child.id);
      }
    });
  }
});

console.log(searchResult);

执行结果

运行后将输出预期结果:

[{key:1, name: "apple"}, {key:1.1,name:"green apple"},{key:1.2, name: "red apple"}]

内容的提问来源于stack exchange,提问作者Dumpling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:36:18