映射两个(或更多)阵列成一个与underscore.js(Mapping two (or more)

2019-08-17 05:23发布

我需要添加元素方面的几个阵列。 也就是说,我有平等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