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

如何合并具有相同label键值的JSON对象并剔除冗余null值

同label JSON对象合并实现方案

问题说明

你当前的代码仅实现了同label条目的去重,未完成同label下其他字段的合并、null值过滤逻辑,另外你给出的期望输出存在JSON语法错误:多个值需要放在数组中,合法的dd1多值写法为"dd1": ["Cat A", "Cat B"]。

实现思路

  • 以label值为键建立临时映射表,相比每次遍历结果数组查找匹配条目效率更高
  • 遍历原始数据时,若label不存在映射表中则初始化条目,所有非null字段初始化为数组格式存储值
  • 若label已存在,遍历当前条目的非label字段,跳过null值后将字段值追加到对应字段的数组中
  • 最终将映射表的value集合转为数组即可,若不需要数组格式也可以根据需求将多个值拼接为字符串

可用TS代码实现

// 原始数据示例
const rawData = [
  {
    "label": "Medium", 
    "dd1": "Cat A", 
    "dd2": "Non Cision",
  },
  {
    "label": "Medium",
    "dd1": "Cat B",
    "dd2": null,
  },
  {
    "label": "Tone", 
    "dd1": "Neutral", 
    "dd2": null,
  }
]

const labelMap: Record<string, any> = {}

rawData.forEach(item => {
  const label = item.label
  // 跳过label非字符串的条目
  if (typeof label !== 'string') return

  // 该label未初始化过
  if (!labelMap[label]) {
    labelMap[label] = { label }
    // 初始化其他字段,过滤null值,值存为数组方便后续追加
    Object.keys(item).forEach(key => {
      if (key === 'label') return
      const val = item[key]
      if (val !== null) {
        labelMap[label][key] = [val]
      } else {
        labelMap[label][key] = null
      }
    })
    return
  }

  // label已存在,合并字段
  Object.keys(item).forEach(key => {
    if (key === 'label') return
    const val = item[key]
    // 跳过null值
    if (val === null) return
    // 字段之前是null的话先初始化为数组
    if (labelMap[label][key] === null) {
      labelMap[label][key] = []
    }
    // 追加值,可新增去重逻辑避免重复值:先判断是否已存在再执行push
    labelMap[label][key].push(val)
  })
})

// 映射表转结果数组
const output = Object.values(labelMap)
console.log(output)

输出结果(合法JSON格式)

[
  {
    "label": "Medium",
    "dd1": ["Cat A", "Cat B"],
    "dd2": ["Non Cision"]
  },
  {
    "label": "Tone",
    "dd1": ["Neutral"],
    "dd2": null
  }
]

如果你不需要数组格式,想要单值直接返回字符串、多值返回拼接字符串,可以在最后转换数组的时候增加对应处理逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:36:05