为啥我的 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=0
和number=5
的位置,所以它会返回5
。
【讨论】:
哦,原来如此!非常感谢! 这意味着无论迭代在哪里,一旦return
被调用,它就会自动跳出循环?
不仅仅是循环,而是整个函数!我认为这在strongly typed 语言中更有意义,其中函数将根据声明的方式返回特定的数据类型。因此,当您定义了一个返回int
的函数时,它需要在到达函数末尾之前的某个时刻返回return
和int
。如果你有一个 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 循环只读取我创建的数组的最后一个元素? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 UICollectionView 无法访问我在 for 循环中创建的数组 - 致命错误:索引超出范围