我有一个对象很少的数组。我想创建一个具有匹配对象总和的新数组。
var array = [
{bill_no:123,paid:30 },
{bill_no:123,paid:30 },
{bill_no:345,paid:12 },
{bill_no:345,paid:12 },
{bill_no:444,paid:10 },
{bill_no:555,paid:12 },
]
我希望输出类似
{bill_no:123,paid:60},{bill_no:345,paid:24},{bill_no:555,paid:12}
答案 0 :(得分:1)
恕我直言,您可以使用array#reduce
和array#findIndex
来执行以下操作:
var arr = [
{bill_no:123,paid:30 },
{bill_no:123,paid:30 },
{bill_no:345,paid:12 },
{bill_no:345,paid:12 },
{bill_no:444,paid:10 },
{bill_no:555,paid:12 },
]
var sum = arr.reduce((a, obj) => {
let i = a.findIndex(o => o.bill_no == obj.bill_no);
i == (-1) ? a.push(obj) : (a[i].paid += obj.paid);
return a;
}, []);
console.log(sum);
答案 1 :(得分:1)
您可以在Array.reduce()
内通过find()
操作使用reduce()
:
var array = [
{bill_no:123,paid:30 },
{bill_no:123,paid:30 },
{bill_no:345,paid:12 },
{bill_no:345,paid:12 },
{bill_no:444,paid:10 },
{bill_no:555,paid:12 },
];
var res = array.reduce((acc, obj)=>{
var existObj = acc.find(item => item.bill_no === obj.bill_no);
if(existObj){
existObj.paid += obj.paid;
return acc;
}
acc.push(obj);
return acc;
}, []);
console.log(res);