我尝试用代码 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
时,它只返回与函数参数相乘的最后一个元素,即如果 {{1} },它只返回 number == 5
而不是整个迭代。为什么会发生这种情况?
答案 0 :(得分:1)
当您 return
某事时,您就脱离了被调用的函数。当您将某些内容打印到控制台而不返回时,该函数将继续运行,直到最后一个循环执行为止。
在您的示例中,函数将在返回以下第一个结果后停止:
arr[i] + '*' + number + '=' + answer
i=0
和 number=5
的位置,因此它将返回 5
。
答案 1 :(得分:1)
你可以像这样在循环外返回。
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
}
答案 2 :(得分: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;
};