【问题标题】:Is there a more efficient way to display the sum of two arrays using For Loops in JavaScript?有没有更有效的方法在 JavaScript 中使用 For 循环显示两个数组的总和?
【发布时间】:2021-08-05 16:14:37
【问题描述】:

我希望最终结果显示“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 这样的数组方法可能看起来更整洁,但效率不会更高。

标签: javascript loops for-loop


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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 Link

    【讨论】:

      【解决方案3】:

      这边

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

      【讨论】:

        【解决方案4】:

        假设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];
        }
        

        【讨论】:

          猜你喜欢
          • 2022-01-07
          • 1970-01-01
          • 2018-11-22
          • 1970-01-01
          • 2019-03-21
          • 2015-04-28
          • 1970-01-01
          • 2015-11-30
          • 1970-01-01
          相关资源
          最近更新 更多