2014-04-16 65 views
1

假设我有6个数字数据点的数组,并且想将其更改为3个数据点的数组,其中每个点是2个点的总和如何使用underscore.js汇总数据点?

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

什么是做到这一点与像underscore.js

+0

哪2个老旧的po整数是应该总结的新点数? [0]映射到([0] + [1]),[1]映射到([2] + [3])等等? – Richard

+0

是的 –

回答

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