如何执行 groupBy 并添加在 underscore.js 中分组的值的总和

Cho*_*der 2 underscore.js react-native

由此:

var x = [ 
    {category: 'Title', price: 100 }, 
    {category: 'Title', price: 200 },
    {category: 'Title3', price: 300 },
    {category: 'Title3', price: 400 },
    {category: 'Title5', price: 500 },
];
Run Code Online (Sandbox Code Playgroud)

对此:

var x = [
    {category: 'Title', price: 300},
    {category: 'Title3', price: 700},
    {category: 'Title5', price: 500},
];            
Run Code Online (Sandbox Code Playgroud)

逻辑与 SQL 查询相同:

SELECT category, sum (price) FROM x GROUP BY category;
Run Code Online (Sandbox Code Playgroud)

max*_*23_ 5

更新:

  1. groupBy 将按“类别”对初始数组进行分组。
  2. map然后将通过传入两个参数来迭代分组数组中的每个对象:keyvalue。第一个key将是“标题”,它value是一个[{category: 'Title', price: 100 }, {category: 'Title', price: 200 }].
  3. 在 中返回更新的数组之前mapreduce用于总结“价格”。基本上,它遍历数组(第一个参数)并从函数(第二个参数)返回总和。请注意,在第一次迭代中,total将是0(中的最后一个参数reduce)。因此,第一次返回将在第二次迭代0 + 100中作为“新”传入total,依此类推。

您可以参考文档了解更多详情。

尝试这个:

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) 
  };
});
Run Code Online (Sandbox Code Playgroud)