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

如何在对象数组中查找type值相同的对象并合并fields字段

实现方案

实现思路

不需要提前知道所有type的取值,只需要两次遍历数组即可完成需求:

  1. 第一次遍历先统计所有type对应的合并后fields,用Map存储,key为type值,value为该type下所有fields合并后的结果
  2. 第二次遍历原数组,给每个对象替换为对应type的合并后fields即可

完整代码

const arr = [
  { type: 'type', fields: ['field1'] },
  { type: 'type2' },
  { type: 'type', fields: ['field2'] },
]

// 聚合同type的fields
const typeFieldsMap = new Map()
arr.forEach(item => {
  const currFields = item.fields || []
  if (typeFieldsMap.has(item.type)) {
    // 此处用Set做fields去重,不需要去重可以去掉Set逻辑
    const merged = [...new Set([...typeFieldsMap.get(item.type), ...currFields])]
    typeFieldsMap.set(item.type, merged)
  } else {
    typeFieldsMap.set(item.type, currFields)
  }
})

// 生成最终数组
const res = arr.map(item => {
  const mergedFields = typeFieldsMap.get(item.type)
  return {
    ...item,
    // 仅当合并后fields不为空时保留fields字段,符合示例输出格式
    ...(mergedFields.length ? { fields: mergedFields } : {})
  }
})

console.log(res)
// 输出结果和你要求的完全一致

兼容说明

  • 自动适配任意返回的type值,无需硬编码判断
  • 兼容不存在fields字段的对象,不会强制新增空fields属性
  • 自带fields去重能力,不需要去重可将合并逻辑改为 [...typeFieldsMap.get(item.type), ...currFields]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:24:00