如果对象中存在重复值,则JavaScript求和值

如果对象中存在重复值,则JavaScript求和值,javascript,ecmascript-6,Javascript,Ecmascript 6,我有一个目标: const transaction = [{ created: 1200, amount: 200 },{ created: 1200, amount: 400 },{ created: 1400, amount: 400 },{ created: 1400, amount: 300 },{ created: 1500, amount: 100 }] 每次创建的都有相同的值,我想对对象的数量进行求和。例如,created:1200总共有一

我有一个目标:

const transaction = [{
  created: 1200,
  amount: 200
},{
  created: 1200,
  amount: 400
},{
  created: 1400,
  amount: 400
},{
  created: 1400,
  amount: 300
},{
  created: 1500,
  amount: 100
}]

每次创建的
都有相同的值,我想对对象的
数量进行求和。例如,
created:1200
总共有一个数量:
600
,因为多个
created
,在1200处,所以数量相加。

这是一个简单的解决方案,请注意,我对其进行了快速编码,以便以后可以对其进行优化

const事务=[{
创建时间:1200,
金额:200
},{
创建时间:1200,
金额:400
},{
创建时间:1400,
金额:400
},{
创建时间:1400,
金额:300
},{
创建时间:1500,
金额:100
}];
//接受一个对象数组
函数sumObj(objArr){
//将“created”和“amount”存储为key=>value的对象
var newObj={};
//在数组中的对象上循环
objArr.forEach(函数(obj){
//如果键出现在'newObj'中,那么我们需要将金额添加到它的值中
如果(对象在新对象中创建){
新建对象[已创建对象]+=对象金额;
}否则{
//否则只需添加键和金额作为值
新建对象[已创建对象]=对象金额;
}
});
//创建一个数组来存储最终的对象
var-arr=[];
//在`newObj'中的属性上循环`
for(新OBJ中的var prop){
//每次推一个对象
arr.push({created:Number(prop),amount:newObj[prop]});
}
//返回最终结果
返回arr;
}
//记录它以查看输出
console.log(sumObj(事务))
const事务=[{
创建时间:1200,
金额:200
},{
创建时间:1200,
金额:400
},{
创建时间:1400,
金额:400
},{
创建时间:1400,
金额:300
},{
创建时间:1500,
金额:100
}];
函数getComputedTransaction(transHistory){
让tempHistory=[];
transHistory.forEach((项目)=>{
让noMatch=true;//创建的临时匹配条件
如果(tempHistory.length>0){
tempHistory.forEach((tempItem,i)=>{
if(item.created==tempItem.created){
tempHistory[i]。金额+=项目金额;
noMatch=!noMatch;//使noMatch=false
}
});
}
返回(noMatch)?临时历史。推送(项目):空;
});
回归历史;
}

log(getComputedTransaction(transaction))
您尝试了什么来解决这个问题?这可能会有帮助:@RobinZigmond我尝试了使用
Array.prototype.reduce
来总结这些值。但是我无法理解只在适当的对象上使用它的逻辑。@Ezrab\uucode>reduce
听起来是个正确的想法-你能分享你的尝试吗?在
reduce
中使用的回调中使用if语句,这样你在求和之前检查
created
的值。