【问题标题】:Why does my for loop only read the last element of the array I made? [duplicate]为什么我的 for 循环只读取我创建的数组的最后一个元素? [复制]
【发布时间】:2021-07-31 03:08:21
【问题描述】:

我尝试在代码 kata 中回答一个简单的问题,问题是这样的:

您的目标是返回始终为 1 到 10 整数的数字的乘法表。 例如,number == 5 的乘法表(字符串)如下所示:

1 * 5 = 5
2 * 5 = 10
3 * 5 = 15
4 * 5 = 20
5 * 5 = 25
6 * 5 = 30
7 * 5 = 35
8 * 5 = 40
9 * 5 = 45
10 * 5 = 50

这是我做的代码,但我使用了console.log

function multiTable(number) {
  // good luck
let arr = [1,2,3,4,5,6,7,8,9,10];
  for(i = 0; i < arr.length; i++) {
    let answer = arr[i] * number;
    console.log(arr[i] + '*' + number + '=' + answer);
  }
}

当我使用开发工具在控制台窗口中尝试时,它运行正常,但是当我将console.log 更改为return 时,它只返回最后一个元素乘以函数参数,即如果number == 5,它只返回@ 987654328@ 而不是整个迭代。为什么会这样?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    使用 return 而不是 console.log 会破坏 for 循环(编辑:和整个函数!)。

    相反,您可以创建一个新数组并将每个答案推送到该数组,然后在 for 循环之后返回新数组。

    类似这样的:

    function multiTable(number) {
    // good luck
    let arr = [1,2,3,4,5,6,7,8,9,10];
    let newArr = [];
      for(i = 0; i < arr.length; i++) {
        let answer = arr[i] * number;
        newArr.push(arr[i] + '*' + number + '=' + answer);
      };
    return newArr;
    };
    

    【讨论】:

      【解决方案2】:

      当您return 某事时,您正在脱离被调用的函数。当你在控制台打印一些东西而不返回时,函数会继续运行,直到最后一个循环执行。

      在您的示例中,函数将在返回以下第一个结果后停止:

      arr[i] + '*' + number + '=' + answer
      

      i=0number=5 的位置,所以它会返回5

      【讨论】:

      • 哦,原来如此!非常感谢!
      • 这意味着无论迭代在哪里,一旦return被调用,它就会自动跳出循环?
      • 不仅仅是循环,而是整个函数!我认为这在strongly typed 语言中更有意义,其中函数将根据声明的方式返回特定的数据类型。因此,当您定义了一个返回int 的函数时,它需要在到达函数末尾之前的某个时刻返回returnint。如果你有一个 void 函数,它不应该返回任何东西(只是运行),调用 return 将停止函数的其余部分执行。
      • 是的,return 总是立即退出函数,无论它放在函数内的什么位置。您还可以在单​​个函数中包含多个 return 语句。一旦达到一个,函数就结束了。
      【解决方案3】:

      你可以像这样在循环外返回。

      function multiTable(number) {
        //  just minor changes.
        
      let arr = [1,2,3,4,5,6,7,8,9,10];
      let decorate = "" 
      
        for(i = 0; i < arr.length; i++) {
          let answer = arr[i] * number;
          console.log(arr[i] + '*' + number + '=' + answer);
          decorate = decorate + arr[i] + '*' + number + '=' + answer + '\n'
        }
        
        // outside of loop
        return decorate
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        • 1970-01-01
        • 1970-01-01
        • 2012-11-13
        • 2015-08-21
        相关资源
        最近更新 更多