首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Underscore.js:集合中项的总和

Underscore.js:集合中项的总和
EN

Stack Overflow用户
提问于 2013-01-21 07:00:01
回答 2查看 32.2K关注 0票数 17

我做了一个小的plnkr here来展示我想要实现的目标。我有一个很大的数据集,我喜欢对单个类型进行求和,从而得到一个总数。

我可以考虑迭代并将结果添加到对象散列中,但我想知道使用下划线解决它的更优雅的方法。我正在使用underscore.js,但从未尝试过map reduce或其他函数范式。请更新plnkr以了解如何执行此操作。

http://plnkr.co/edit/B5HGxhwvWsfvOR97z7TL?p=preview

代码语言:javascript
复制
var data = [ {'type': "A", 'val':2},
  {'type': "B", 'val':3},
  {'type': "A", 'val':1},
  {'type': "C", 'val':5} ];


 _.each(data, function (elm, index) {
   console.log(elm);  
 });

 /*
 Desired output

 out = [ {'type': "A", 'total':3},
  {'type': "B", 'total':3},
  {'type': "C", 'total':5} ];

 */
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-21 07:31:48

代码语言:javascript
复制
var data = [ { type: "A", val: 2 },
             { type: "B", val: 3 },
             { type: "A", val: 1 },
             { type: "C", val: 5 } ];

var groups = _(data).groupBy('type');

var out = _(groups).map(function(g, key) {
  return { type: key, 
           val: _(g).reduce(function(m,x) { return m + x.val; }, 0) };
});

DEMO

票数 32
EN

Stack Overflow用户

发布于 2013-01-21 07:35:15

答案和@GregL差不多,只是加了一点下划线:

代码语言:javascript
复制
summed_by_type = _(data).reduce(function(mem, d) {
  mem[d.type] = (mem[d.type] || 0) + d.val
  return mem
}, {})

pairs = _(summed_by_type).map(function(v,k) { return {type: k, total: v} })
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14430321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档