JavaScript 合并具有相同键的对象并将它们的值相加

标签 javascript node.js

代码按预期工作正常,但 name响应中缺少参数。

var objArr= [{'location_id':1,'quantity':20,'name':'AB'},{'location_id':1,'quantity':20,'name':'AB'},{'location_id':3,'quantity':20,'name':'cd'}]

// first, convert data into a Map with reduce
let counts = objArr.reduce((prev, curr) => {
  let count = prev.get(curr.location_id) || 0;
  prev.set(curr.location_id, (curr.quantity + count),curr.name);
  return prev;
}, new Map());

// then, map your counts object back to an array
let reducedObjArr = [...counts].map(([location_id, quantity,name]) => {
  return {location_id, quantity,name}
})


console.log (reducedObjArr);

预期响应:
[
{"location_id":1,"quantity":40, "name":'AB'},
{"location_id":3,"quantity":20, "name":'cd'}
]

最佳答案

最简单的方法:

const objArr = 
    [ { location_id: 1, quantity: 20, name: 'AB' } 
    , { location_id: 1, quantity: 20, name: 'AB' } 
    , { location_id: 3, quantity: 20, name: 'cd' } 
    ] 
     
const sum = objArr.reduce((a,c)=>{
  let x = a.find(e=>e.location_id===c.location_id)
  if(!x) a.push(Object.assign({},c))
  else  x.quantity += c.quantity
  return a
},[])

console.log(sum)
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于JavaScript 合并具有相同键的对象并将它们的值相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62504053/

相关文章:

javascript - 与 json 一起调用 Javascript 函数

javascript - 如何在这些选项之间放置文本,特别是单词 "Or"?

angularjs - E/configParser - 错误消息 : configuration file cli. js 未导出配置对象

node.js - 从 Node JS 渲染该模板时,EJS 文件中的 Angular 5

javascript - 如何将字符串拆分为数组,修改数组然后应用于javascript中的字符串?

javascript - Gecko - CSS 布局边框半径 - Javascript 转换

javascript - Jquery 函数在初始加载时未触发

node.js - SendGrid 事件运行多次

javascript - 退出后如何重新启动代码?

javascript - 在 async.each 中产生错误