Javascript 如何使用下划线.js汇总数据点?

Javascript 如何使用下划线.js汇总数据点?,javascript,arrays,underscore.js,Javascript,Arrays,Underscore.js,假设我有一个由6个数字数据点组成的数组,并希望将其更改为一个由3个数据点组成的数组,其中每个点是其中2个点的总和 [1,1,1,1,1,1]~>[2,2,2] 对于像underline.js这样的库,最好的方法是什么?我找到了一种方法。我很乐意接受一个更好的解决方案 values = [1,1,1,1,1,1]; reportingPeriod = 2; var combined = []; _.inject( values, function ( total,

假设我有一个由6个数字数据点组成的数组,并希望将其更改为一个由3个数据点组成的数组,其中每个点是其中2个点的总和

[1,1,1,1,1,1]~>[2,2,2]


对于像underline.js这样的库,最好的方法是什么?我找到了一种方法。我很乐意接受一个更好的解决方案

    values = [1,1,1,1,1,1];
    reportingPeriod = 2;
    var combined = [];
    _.inject( values, function ( total, value, index) {
        if ((index + 1) % reportingPeriod === 0) {
            combined.push(total + value);
            return 0;
        } else {
            return total + value
        }
    }, 0);

如果你想用一种通用的、功能性的方式来做,那么

function allowIndexes(idx) {
    return function(item, index) {
        return index % idx;
    }
}

function sum() {
    return _.reduce(_.toArray(arguments)[0], function(result, current) {
        return result + current;
    }, 0);
}

var isIndexOdd = allowIndexes(2);

var zipped = _.zip(_.reject(data, isIndexOdd), _.filter(data, isIndexOdd));
console.log(_.map(zipped, sum));
# [ 3, 7, 11 ]
但是,这将是任何地方附近的性能

var result = [];
for (var i = 0; i < data.length; i += 2) {
    result.push(data[i] + data[i + 1]);
}
console.log(result);
var结果=[];
对于(变量i=0;i
使用lodash,您可以执行以下操作:

let arr = _.fill(Array(6), 1);
let reducer = (sum, num) => sum += num;
arr = _.chain(arr).chunk(2).map(arr => arr.reduce(reducer)).value();

哪两个较旧的点是较新的点的总和?[0]是否映射到([0]+[1]),[1]是否映射到([2]+[3]),等等?