使用下划线js减少

arn*_*old 4 javascript reduce underscore.js

underscorejs如何reduce工作?

它很简单 _.reduce([1, 2, 3], function(memo, num){ return memo + num; }, 0);(结果是6).

但其他可选参数如何工作?在文档中它说:

备注是缩减的初始状态,它的每个连续步骤都应该由迭代器返回.迭代器传递四个参数:备忘录,然后是迭代的值和索引(或键),最后是对整个列表的引用."

但我不明白.我试图reduce用于以下问题,我无法弄清楚:

var input = [{"score": 2, "name": "Jon", "venue": "A"}, {"score": 3, "name": "Jeff", "venue":"A"}, {"score": 4, "name": "Jon", "venue":"B"}, {"score": 4, "name": "Jeff", "venue":"B"}];

var output = [{"score": 6, "name":"Jon", "venue": ["A", "B"]}, {"score": 7, "name":"Jeff", "venue": ["A", "B"]}];
Run Code Online (Sandbox Code Playgroud)

如何使用_reduce输入获得输出?它将如何在内部减少真正有用.

Alb*_*rto 10

Reduce获取值列表,并将其减少为单个值.你正在尝试的不只是减少.您正尝试首先分组(按名称),然后减少每个组.可能的实现将是这样的,您首先分组,然后将每个组映射到累积分数并附加场地的reduce操作.

var input = [
    {"score": 2, "name": "Jon", "venue": "A"}, 
    {"score": 3, "name": "Jeff", "venue":"A"}, 
    {"score": 4, "name": "Jon", "venue":"B"}, 
    {"score": 4, "name": "Jeff", "venue":"B"}];

var output = _.map(_.groupBy(input, "name"), function(group, name) {
    return _.reduce(group, function(memo, elem) { 
            memo.score += elem.score;
            memo.venue.push(elem.venue);
            return memo;
        },
        { name: name, score: 0, venue: [] });
});
Run Code Online (Sandbox Code Playgroud)