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

IT技术 javascript arrays loops
2021-02-19 08:44:27

我想将一个数字数组的每个值与其在不同数字数组中的相应值相加,并且我想在不遍历每个单独值的情况下执行此操作。
所以:

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

var sum    = [6,8,10,12];

但是,我想一举完成,而不是这样做:

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

任何人都可以想办法吗?我很难过。

6个回答

我知道这是一个老问题,但我只是在与某人讨论这个问题,我们想出了另一个解决方案。您仍然需要一个循环,但您可以使用 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]
那么,如果 array1 num 重复呢?
2021-04-15 08:44:27
如果我有var array1 = [1,2,3,4,5] & array2 = [5,6,7,8].. 那么最后一个整数 5 不打印。我该怎么做
2021-04-17 08:44:27
@VladMiller 这是一个很好的观点。我当时没有意识到 JavaScript 的 map() 方法实际上也允许您访问索引以解决该问题。我更新了代码以反映这一点。
2021-05-11 08:44:27
如果需要对 3 个以上的数组求和怎么办?
2021-05-14 08:44:27

这是 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

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

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

console.log(squares);
您将如何将两个数组嵌套为另一个数组的索引?像这样...... [[5, 2, 3], [2, 2, 3, 10, 6] ]
2021-04-28 08:44:27
这与接受的答案完全相同
2021-05-07 08:44:27

下面的示例即使在长度变化和更多用例的情况下也能工作。查看。如果需要,您也可以进行原型设计。

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

现在的代码片段提供了一个内置的控制台。无需设置 HTML。
2021-04-16 08:44:27
看你的输入
2021-04-27 08:44:27
你的第二个用例工作不正常..给我这个结果 {1: 1, 10: 2, 11: 3, 20: 1, 25: 3, 30: 2} 1: 1 10: 2 11: 3 20: 1 25: 3 30: 2
2021-05-03 08:44:27

只需合并波波维奇和特瓦尔特斯的答案。

Array.prototype.SumArray = function (arr) {

        var sum = this.map(function (num, idx) {
          return num + arr[idx];
        });

        return sum;
    }
var array1 = [1,2,3,4];
var array2 = [5,6,7,8];
var sum = array1.SumArray(array2);
console.log(sum); // [6,8,10,12]