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

新手上路,请多包涵

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

所以:

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

谁能想到办法?我很困惑。

原文由 TheNovice 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 209
2 个回答

我知道这是一个老问题,但我刚刚和某人讨论过这个问题,我们想出了另一个解决方案。您仍然需要一个循环,但您可以使用 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]

原文由 twalters 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

原文由 jo_va 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题