【问题标题】:How to group by and sum an array of objects? [duplicate]如何对对象数组进行分组和求和? [复制]
【发布时间】:2015-06-04 12:49:04
【问题描述】:

我想按Id 对一组对象进行分组,然后在 jQuery 中求和。我怎样才能做到这一点?

例如:

var array = [
  { Id: "001", qty: 1 },
  { Id: "002", qty: 2 },
  { Id: "001", qty: 2 },
  { Id: "003", qty: 4 }
]

应该导致:

[
  { Id: "001", qty: 3 },
  { Id: "002", qty: 2 },
  { Id: "003", qty: 4 }
]

【问题讨论】:

    标签: javascript arrays grouping


    【解决方案1】:

    你可以循环总结一下

    var array = [
      { Id: "001", qty: 1 }, 
      { Id: "002", qty: 2 }, 
      { Id: "001", qty: 2 }, 
      { Id: "003", qty: 4 }
    ];
    
    var result = [];
    array.reduce(function(res, value) {
      if (!res[value.Id]) {
        res[value.Id] = { Id: value.Id, qty: 0 };
        result.push(res[value.Id])
      }
      res[value.Id].qty += value.qty;
      return res;
    }, {});
    
    console.log(result)

    小提琴:Fiddle

    【讨论】:

    • res[value.Id] = { qty: 0, Id: value.Id}; 步骤中将qty 设置为0 很重要。否则你会得到重复的值
    • 这不应该是 var result = array.reduce.... 而不是使用副作用吗?
    【解决方案2】:
    var newArr = [];
    
    $.each(array,function(index,element){
        if(newArr[element.Id]==undefined){
            newArr[element.Id] =0;
        }
        newArr[element.Id] += element.qty;
    });
    console.log(newArr);
    

    Demo

    【讨论】:

    • 你没有创建对象数组
    • 这使用 element.id 作为数组索引,而不是作为对象键。
    猜你喜欢
    • 1970-01-01
    • 2019-11-20
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 2015-09-09
    相关资源
    最近更新 更多