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

如何基于JSON响应统计同类产品总数量并生成指定格式数组

报错原因

  • 首先你的中间数组存在语法错误:["Iphone11",3] 和后续 ["nord128",6] 之间缺少逗号,JS 解析时会把后者识别为前者的下标访问操作,自然无法读取到 [0] 属性。
  • 其次相邻比对的逻辑前提是同productName的元素已经连续排列,但你的原始数据里nord128的条目中间穿插了Iphone11,就算修复语法问题,也没法完成全量汇总。

正确实现方案

推荐用对象做中间汇总再转嵌套数组的方案,逻辑更简洁,兼容性更强:

const res = [
  {productName:"nord128",quantiy: 4},
  {productName:"nord128", quantiy:5},
  {productName:"nord128", quantiy:8},
  {productName:"Iphone11",quantiy:3},
  {productName:"nord128",quantiy:6}
]

// 第一步:用对象统计各产品总数量
const countMap = {}
res.forEach(item => {
  const name = item.productName
  countMap[name] = (countMap[name] || 0) + item.quantiy
})

// 第二步:转成目标嵌套数组格式
const result = Object.entries(countMap)
console.log(result) // 输出 [["nord128", 23], ["Iphone11", 3]]

如果你一定要用相邻比对的方法实现,需要先对数组按productName排序再做汇总:

// 先给你生成的中间数组按产品名排序
array.sort((a,b) => a[0].localeCompare(b[0]))

const result = []
let currentName = array[0][0]
let currentSum = array[0][1]

for(let i = 1; i < array.length; i++) {
  if(array[i][0] === currentName) {
    currentSum += array[i][1]
  } else {
    result.push([currentName, currentSum])
    currentName = array[i][0]
    currentSum = array[i][1]
  }
}
// 把最后一组统计结果推入数组
result.push([currentName, currentSum])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 20:36:04