我需要添加元素方面的几个阵列。 也就是说,我有平等lenght的多个阵列,而且我只需要一个具有相同数量的输入端的总和要素。 下划线有方法的所有元素折叠成一个和使用功能的每一个元素映射,但是我无法找到任何方式两个数组件明智的结合起来。
如果我原来的数组是[1,2,3,4,5,6]
[1,1,1,1,1,1]
和[2,2,2,2,2,2]
的结果应该是[4,5,6,7,8,9]
。
我知道我可以通过遍历数组在这样做,但不知道是否会更容易/更快的使用underscore.js功能。 我可以做吗? 怎么样?
Answer 1:
是更容易,更快的没有。 为了模拟zipWith
,可以将结合zip
与求和reduce
:
var arrays = [[1,2,3,4,5,6], [1,1,1,1,1,1], [2,2,2,2,2,2]];
_.map(_.zip.apply(_, arrays), function(pieces) {
return _.reduce(pieces, function(m, p) {return m+p;}, 0);
});
Answer 2:
我不认为它会以下划线容易。 这里有两个选项:
var a = [1,2,3,4,5,6]
, b = [1,1,1,1,1,1]
, c = [2,2,2,2,2,2];
var result = a.map(function(_,i) {
return a[i] + b[i] + c[i];
});
// OR
var result = [];
for (var i = 0; i < a.length; i++) {
result.push(a[i] + b[i] + c[i]);
}
console.log(result); //=> [4,5,6,7,8,9]
Answer 3:
你可以使用lodash( https://lodash.com/ ),而不是它有一个很酷的zipWith(下划线https://lodash.com/docs#zipWith )运算符,将工作像下面的例子。 (注_.add也是lodash数学函数)
var a = [1,2,3,4,5,6]
, b = [1,1,1,1,1,1]
, c = [2,2,2,2,2,2];
var result = _.zipWith(a, b, c, _.add);
// result = [4, 5, 6, 7, 8, 9]
Answer 4:
您可以结合使用压缩地图,并降低:未经测试,但这样的事情可能会奏效
var result = _.map(_.zip(array1, array2, array3),function(zipped){return _.reduce(zipped, function(memo, num){ return memo + num; }, 0)});
Answer 5:
使用Lodash 4 :
var arrays = [ [1, 2, 3, 4, 5, 6], [1, 1, 1, 1, 1, 1], [2, 2, 2, 2, 2, 2] ]; var result = _.map(_.unzip(arrays), _.sum); console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
文章来源: Mapping two (or more) arrays into one with underscore.js