有没有一种更有效的方法可以在JavaScript中使用For Loops显示两个数组的总和



我希望最终结果显示"276+351=627〃;。在使用for循环时,有没有更有效的方法可以做到这一点?这是我在网上找到的一个练习题,所以2个数组之后的内容就是我想出的。

let arr_1 = [3, 5, 22, 5,  7,  2,  45, 75, 89, 21, 2];
let arr_2 = [9, 2, 42, 55, 71, 22, 4,  5,  90, 25, 26];
let sum1 = 0;
let sum2 = 0;
for (let i = 0; i < arr_1.length; i++) {
sum1 += arr_1[i];
}
for (let j = 0; j < arr_2.length; j++) {
sum2 += arr_2[j];
}
let total = sum1 + sum2;
console.log(`${sum1} + ${sum2} = ${total}`);

reduce函数允许您以非常短的方式编写:

const arr_1 = [3, 5, 22, 5,  7,  2,  45, 75, 89, 21, 2],
arr_2 = [9, 2, 42, 55, 71, 22, 4,  5,  90, 25, 26],
add   = arr => arr.reduce((sum, n) => sum + n),
sum1  = add(arr_1),
sum2  = add(arr_2),
total = sum1 + sum2;
console.log(`${sum1} + ${sum2} = ${total}`);

这种方式

const
doSum = arr => arr.reduce((a,c)=>a+c,0)  // let zero value, if arr is empty
, arr_1 = [ 3, 5, 22, 5,  7,  2,  45, 75, 89, 21, 2 ]
, arr_2 = [ 9, 2, 42, 55, 71, 22, 4,  5,  90, 25, 26 ] 
, sum1  = doSum(arr_1) 
, sum2  = doSum(arr_2)
, total = sum1 + sum2
;
console.log(`${sum1} + ${sum2} = ${total}`)

如果您阅读MDN Docs Link Here,有很多方法可以循环遍历数组。其中一种方法是reduce((,它几乎适用于所有浏览器,但我更喜欢使用forEach((因为它是数组上最古老的proto之一。。是这样做的

let arr_1 = [3, 5, 22, 5, 7, 2, 45, 75, 89, 21, 2];
let arr_2 = [9, 2, 42, 55, 71, 22, 4, 5, 90, 25, 26];
let sum1 = 0
let sum2 = 0
let total = 0
arr_1.forEach((el) => {
sum1 += el
});
arr_2.forEach((el) => {
sum2 += el
});
total = sum1 + sum2
console.log(`${sum1} + ${sum2} = ${total}`);

JSFiddle链接

假设arr_1arr_2的长度相同,则只需要一个循环。这是你将得到的效率(在速度/性能方面(:

let sum1 = 0, sum2 = 0,
arr_1 = [3, 5, 22, 5,  7,  2,  45, 75, 89, 21, 2],
arr_2 = [9, 2, 42, 55, 71, 22, 4,  5,  90, 25, 26];
for (let i = 0; i < arr_1.length; i++) {
sum1 += arr_1[i], sum2 += arr_2[i];
}
let total = sum1 + sum2;
console.log(`${sum1} + ${sum2} = ${total}`);

普通的for循环通常比更高级的循环函数更快,因此您已经拥有了性能最好的循环。

您也可以将其用于不同长度的数组,方法是循环较大的数组,仍然只执行一个for循环:

let sum1 = 0, sum2 = 0,
arr_1 = [3, 5, 22, 5,  7,  2,  45, 75, 89, 21, 2, 6, 40, 4],
arr_2 = [9, 2, 42, 55, 71, 22, 4,  5,  90, 25, 26];
for (let i = 0; i < arr_1.length; i++) {
sum1 += arr_1[i], sum2 += arr_2[i] || 0;
}
let total = sum1 + sum2;
console.log(`${sum1} + ${sum2} = ${total}`);

arr_2用完时,它将开始输出undefined。在这种情况下,arr_2[i] || 0表达式将使用次要值。

另一种选择是检查偏移是否存在:

for (let i = 0; i < arr_1.length; i++) {
sum1 += arr_1[i];
if(arr_2[i]) sum2 += arr_2[i];
}

最新更新