You need to enable JavaScript to run this app. 如何按pid合并库存JSON并对instock求和及处理边缘场景
优惠活动
大模型
产品
解决方案
定价
更多

如何按pid合并库存JSON并对instock求和及处理边缘场景

问题根因

你当前的合并逻辑本质是直接拼接两个order数组,没有按pid维度做去重和库存累计,因此会出现重复pid条目、库存值错误的问题。

正确合并逻辑

核心采用pid-库存映射表的方案,天然兼容所有你提到的边缘场景:

  • 仅出现在单个文件的pid:直接保留对应库存值,无需额外判断分支
  • 空order数组:遍历逻辑会自动跳过空列表,不会产生冗余项或报错
可运行实现示例(JavaScript)

处理JSON格式数据非常方便,还能额外兼容单文件内本身存在重复pid的极端情况:

// 输入示例
const payloadA = {
  "order": [
    {"pid": "a", "instock": "2"},
    {"pid": "b", "instock": "2"},
    {"pid": "c", "instock": "2"}
  ]
}
// 兼容空数组场景:替换成 {"order": []} 也可正常运行
const payloadB = {
  "order": [
    {"pid": "c", "instock": "2"},
    {"pid": "d", "instock": "2"}
  ]
}

// 初始化pid到库存的累计映射
const stockMap = new Map()

// 封装通用数据集处理函数
const handleDataset = (dataset) => {
  // 空order数组会直接跳过循环,无额外处理逻辑
  dataset.order.forEach(item => {
    // 原始instock为字符串类型,转成数值后累加,最后再转回字符串保持格式一致
    const stockNum = parseInt(item.instock, 10)
    stockMap.set(item.pid, (stockMap.get(item.pid) || 0) + stockNum)
  })
}

// 依次处理两个数据集
handleDataset(payloadA)
handleDataset(payloadB)

// 映射表转回目标JSON结构
const mergedResult = {
  order: Array.from(stockMap, ([pid, totalStock]) => ({
    pid,
    instock: String(totalStock)
  }))
}
输出结果
{
  "order": [
    {"pid": "a", "instock": "2"},
    {"pid": "b", "instock": "2"},
    {"pid": "c", "instock": "4"},
    {"pid": "d", "instock": "2"}
  ]
}
边缘场景校验
  • 空payloadB场景:当payloadB.order为[]时,处理逻辑不会新增任何映射项,输出结果和payloadA完全一致
  • 单文件独有pid场景:仅在A或仅在B存在的pid,会直接保留对应库存值,不会丢失
  • 单文件内重复pid场景:如果单个文件的order数组里本身就有同pid多次出现的情况,也会自动累加库存,无需额外处理

注:如果你的instock字段本身是数字类型,只需去掉代码里的parseInt和最后的String转换即可;如果有小数库存需求,把parseInt换成parseFloat即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 10:15:04