在vue js中获取匹配对象的总和

时间:2018-07-19 13:23:33

标签: javascript vuejs2

我有一个对象很少的数组。我想创建一个具有匹配对象总和的新数组。

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}

2 个答案:

答案 0 :(得分:1)

恕我直言,您可以使用array#reducearray#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);