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)
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 4Run 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)
即使长度变化且用例较少,下面的示例也能正常工作。查看。如果需要,您也可以进行原型设计。
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)