繁体   English   中英

有没有更有效的方法来使用 JavaScript 中的 For 循环显示两个 arrays 的总和?

[英]Is there a more efficient way to display the sum of two arrays using For Loops in JavaScript?

我希望最终结果显示“276 + 351 = 627”。 使用 for 循环时有更有效的方法吗? 这是我在网上找到的一个练习题,所以2 arrays之后的东西就是我想出来的。

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 function 允许您以非常简短的方式编写它:

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

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

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链接

这边走

 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}`)

假设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循环通常比更高级的循环函数更快,因此您已经拥有了性能最好的循环。

您也可以通过循环较大的一个,将其用于不同长度的 arrays,但仍然只执行一个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 在这种情况下, 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];
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM