如何使用underscore.js汇总数据点?

时间:2014-04-16 21:23:06

标签: javascript arrays underscore.js

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

[1,1,1,1,1,1]〜> [2,2,2]

使用像underscore.js这样的库来实现此目的的最佳方法是什么

3 个答案:

答案 0 :(得分:1)

如果您想以通用的,功能性的方式进行,那么

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);

答案 1 :(得分:0)

我找到了一种方法。我很乐意接受更好的解决方案。

    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);

答案 2 :(得分:0)

使用lodash,您可以执行以下操作:

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