为啥我的 for 循环只读取我创建的数组的最后一个元素? [复制]

Posted

技术标签:

【中文标题】为啥我的 for 循环只读取我创建的数组的最后一个元素? [复制]【英文标题】: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@ 而不是整个迭代。为什么会这样?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于为啥我的 for 循环只读取我创建的数组的最后一个元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

For循环遍历数组仅显示最后一个值

为啥我的 UICollectionView 无法访问我在 for 循环中创建的数组 - 致命错误:索引超出范围

为啥我的 For 循环在 EJS 节点 js 中只返回一个值?

For 循环只给出数组的最后一个值

为啥我的委托只使用我的 foreach 循环中的最后一项?

为啥我在这个 for 循环中无法读取未定义的属性“startsWith”?