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

JS遍历数组按taxonomy分组聚合id生成新数组的最优实现方案

数组分组实现方案

原有代码问题梳理

  • 原对象的主键为id,你的代码中错误解构了不存在的value字段,无法获取正确的id值
  • 对过滤后的数组执行map操作时,为每个元素单独生成了包含taxonomy和单个id的对象,最后将整个数组push到newArray,导致最终结果为二维数组,且ids字段为单个数值而非数组
  • 实现逻辑中多次遍历数组(提取taxonomy遍历一次,去重后遍历每个唯一taxonomy时又对原数组做filter和map,整体时间复杂度为O(n*m)),效率较低

优化实现方案

使用reduce一次遍历完成分组,再转为目标格式,时间复杂度为O(n),仅需遍历原数组一次:

// 第一步:按taxonomy分组,生成 {taxonomy值: id数组} 的映射对象
const groupMap = terms.reduce((result, item) => {
  const { taxonomy, id } = item
  // 不存在对应taxonomy分组时初始化空数组
  if (!result[taxonomy]) {
    result[taxonomy] = []
  }
  // 将当前id加入对应分组
  result[taxonomy].push(id)
  return result
}, {})

// 第二步:将映射对象转换为目标数组结构
const newArray = Object.entries(groupMap).map(([taxonomy, ids]) => ({
  taxonomy,
  ids
}))

执行上述代码后得到的newArray完全符合你需要的结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 23:09:00