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

JavaScript如何统计对象数组中各人名出现次数及对应总价

实现思路
  • 用临时对象做中间映射,以人名为key存储对应的统计数据,只需遍历一次原数组即可完成两个字段的统计,时间复杂度为O(n)
  • 遍历完成后将临时映射的value直接转为目标数组结构即可
注意点

原数据中的price是字符串类型,统计总价时需要先转为数字,避免出现字符串拼接的异常结果。你之前写的次数统计代码存在两个问题:

  1. counts声明为数组,但实际用对象键值的方式存储数据,逻辑不匹配
  2. 遍历取name时错误使用x[0],原数组项是对象,应该用x.name取值
完整实现代码
const obj = [
  {'name':'sven','price':'10'},
  {'name':'jan','price':'12'},
  {'name':'john','price':'5'},
  {'name':'nick','price':'13'},
  {'name':'sven','price':'11'},
  {'name':'jan','price':'7'},
  {'name':'nick','price':'9'},
];

const tempMap = {}
obj.forEach(item => {
  const name = item.name
  const price = Number(item.price)
  // 首次出现的人名初始化统计数据
  if(!tempMap[name]) {
    tempMap[name] = {
      person: name,
      count: 0,
      totalPrice: 0
    }
  }
  // 更新统计值
  tempMap[name].count += 1
  tempMap[name].totalPrice += price
})

// 转为目标数组结构,如需count和totalPrice为字符串可自行转类型
const counts = Object.values(tempMap)
console.log(counts)
输出结果
[
  { person: 'sven', count: 2, totalPrice: 21 },
  { person: 'jan', count: 2, totalPrice: 19 },
  { person: 'john', count: 1, totalPrice: 5 },
  { person: 'nick', count: 2, totalPrice: 22 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:09:02