Javascript - 在单次迭代中求和两个数组

The*_*ice 29 javascript arrays loops

我想将一个数字数组的每个值与不同数字数组中的相应值相加,我想这样做而不循环遍历每个单独的值.
所以:

var array1 = [1,2,3,4];
var array2 = [5,6,7,8];

var sum    = [6,8,10,12];
Run Code Online (Sandbox Code Playgroud)

但是,我喜欢一下子做到这一点,而不是这样做:

for(var i = 0; i < array1.length; i++){
   sum.push(array1[i] + array2[i]);
}
Run Code Online (Sandbox Code Playgroud)

谁能想到办法?我很难过.

twa*_*ers 47

我知道这是一个老问题,但我只是和某人讨论这个问题,我们想出了另一个解决方案.您仍然需要一个循环,但您可以使用Array.prototype.map()完成此操作.

var array1 = [1,2,3,4];
var array2 = [5,6,7,8];

var sum = array1.map(function (num, idx) {
  return num + array2[idx];
}); // [6,8,10,12]
Run Code Online (Sandbox Code Playgroud)

  • 如果需要对 3 个以上的数组求和怎么办? (2认同)
  • 如果我有 `var array1 = [1,2,3,4,5] &amp; array2 = [5,6,7,8]`.. 那么最后一个整数 5 不会被打印。我应该为此做什么 (2认同)

jo_*_*_va 20

这是 N 个可能不同长度的数组的通用解决方案。

它使用Array.prototype.reduce()Array.prototype.map()Math.max()Array.from()

function sumArrays(...arrays) {
  const n = arrays.reduce((max, xs) => Math.max(max, xs.length), 0);
  const result = Array.from({ length: n });
  return result.map((_, i) => arrays.map(xs => xs[i] || 0).reduce((sum, x) => sum + x, 0));
}

console.log(...sumArrays([0, 1, 2], [1, 2, 3, 4], [1, 2])); // 2 5 5 4
Run Code Online (Sandbox Code Playgroud)


小智 9

var arr = [1,2,3,4];
var arr2 = [1,1,1,2];

var squares = arr.map((a, i) => a + arr2[i]);

console.log(squares);
Run Code Online (Sandbox Code Playgroud)

  • 这与接受的答案完全相同 (4认同)

Ven*_*t.R 7

即使长度变化且用例较少,下面的示例也能正常工作。查看。如果需要,您也可以进行原型设计。

function sumArray(a, b) {
      var c = [];
      for (var i = 0; i < Math.max(a.length, b.length); i++) {
        c.push((a[i] || 0) + (b[i] || 0));
      }
      return c;
}

// First Use Case.
var a = [1, 2, 3, 4];
var b = [1, 2, 3, 4];
console.log( sumArray(a, b) );

// Second Use Case with different Length.
var a = [1, 2, 3, 4];
var b = [1, 2, 3, 4, 5];
console.log( sumArray(a, b) );

// Third Use Case with undefined values and invalid length.
var a = [1, 2, 3, 4];
var b = [];
b[1] = 2;
b[3] = 4;
b[9] = 9;
console.log( sumArray(a, b) );
Run Code Online (Sandbox Code Playgroud)