You need to enable JavaScript to run this app. 如何合并两个带ColData结构的API嵌套JSON对象并实现去重求和?
优惠活动
大模型
产品
解决方案
定价
更多

如何合并两个带ColData结构的API嵌套JSON对象并实现去重求和?

嵌套表格类JSON的合并实现方案

卡同步遍历逻辑的核心原因是把动态树结构的递归遍历,套用到了有固定业务规则的二维表格返回结构上,这类结构根本不需要逐节点对齐两个JSON的指针,按固定层级拆分处理就能绕开遍历卡点。

一、明确数据的固定层级边界

这类接口返回的结构是完全固定的,没有动态嵌套分支,不需要做无目标的全量递归:

  • 顶层固定包含Header、Rows两个字段
  • Rows下固定是Row数组,每个Row条目代表表格的一行
  • 每个Row下的ColData集合代表当前行的所有单元格数据,其中ColData的首项内容是行的唯一匹配标识

二、替代同步遍历的分步执行逻辑

完全按照约定的合并规则,不用维护两个遍历指针,三步就能走完合并流程:

  • 处理公共表头:两个接口返回的Header内容完全一致,直接取任意一份的Header作为最终结果的表头即可,不需要逐节点比对
  • 做行级匹配:
    先遍历第一份返回的所有Row,把每个Row的ColData首项匹配值作为键,整行对象作为值存在索引Map里;再遍历第二份返回的所有Row,同样取ColData首项值查Map:
    • 匹配不到(属于单边独有行):直接把整行存入Map,保留原始行结构
    • 匹配得到(属于双边共有行):不逐行做外层结构递归,只对两个行下的ColData集合做单元格级合并
  • 做ColData单元格合并:
    对匹配到的共有行的两套ColData集合,同样用ColData的标识字段做键建索引:
    • 某ColData只在单边存在:直接补全到最终的ColData集合里
    • 某ColData在双边同时存在:取两边的value数值直接求和,作为该ColData的最终value值

三、同步遍历逻辑容易踩的误区

  • 不要从最顶层开始维护两个同步遍历指针,遇到节点值不对就追加——这种逻辑会把两边顺序不一致的ColData错判为缺失项,最终生成重复的列数据
  • 行匹配、ColData匹配的判断,只认ColData的业务标识值,不要依赖数组下标做匹配,不然两边返回的单元格顺序不一致时会直接匹配失效

核心处理逻辑的代码片段参考:

const rowIndex = new Map()
// 遍历第一份数据建行索引
res1.Rows.Row.forEach(row => {
  const rowKey = row.ColData[0].value // ColData首项作为行匹配键
  rowIndex.set(rowKey, row)
})
// 遍历第二份数据做合并
res2.Rows.Row.forEach(row => {
  const rowKey = row.ColData[0].value
  const existRow = rowIndex.get(rowKey)
  if (!existRow) {
    rowIndex.set(rowKey, row)
    return
  }
  // 对共有行的ColData建列索引做合并
  const colIndex = new Map()
  existRow.ColData.forEach(col => colIndex.set(col.key, col))
  row.ColData.forEach(col => {
    const existCol = colIndex.get(col.key)
    if (!existCol) {
      colIndex.set(col.key, col)
      return
    }
    // 同ColData数值累加求和
    existCol.value = Number(existCol.value) + Number(col.value)
  })
  // 替换为合并后的ColData集合
  existRow.ColData = Array.from(colIndex.values())
})
// 组装最终合并结果
const mergedResult = {
  Header: res1.Header,
  Rows: { Row: Array.from(rowIndex.values()) }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.07 19:45:02