如何进行groupBy并添加以underscore.js分组的值的总和

时间:2017-03-15 06:58:25

标签: react-native underscore.js

由此:

var x = [ 
    {category: 'Title', price: 100 }, 
    {category: 'Title', price: 200 },
    {category: 'Title3', price: 300 },
    {category: 'Title3', price: 400 },
    {category: 'Title5', price: 500 },
];

对此:

var x = [
    {category: 'Title', price: 300},
    {category: 'Title3', price: 700},
    {category: 'Title5', price: 500},
];            

逻辑与SQL查询相同:

SELECT category, sum (price) FROM x GROUP BY category;

1 个答案:

答案 0 :(得分:2)

更新:

  1. groupBy会将初始数组按"类别"。
  2. 分组 然后,
  3. map将通过传递两个参数(keyvalue来迭代分组数组中的每个对象。第一个key将是"标题"其value[{category: 'Title', price: 100 }, {category: 'Title', price: 200 }]
  4. 的数组
  5. map中返回更新的数组之前,reduce用于总结"价格"。基本上,它遍历数组(第一个参数)并从函数(第二个参数)返回总和。请注意,在第一次迭代中,total将为0reduce中的最后一个参数)。因此,第一次返回将是0 + 100,然后将其作为' new'在第二次迭代中total,依此类推。
  6. 您可以参考documentation了解更多详情。

    试试这个:

    var groups = _.groupBy(x, 'category');
    var result = _.map(groups, function(value, key) {
      return { 
        category: key, 
        price: _.reduce(value, function(total, o) { 
            return total + o.price;
        }, 0) 
      };
    });