为什么我的 for 循环只读取我创建的数组的最后一个元素?

时间:2021-05-09 13:15:44

标签: javascript

我尝试用代码 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 而不是整个迭代。为什么会发生这种情况?

3 个答案:

答案 0 :(得分:1)

当您 return 某事时,您就脱离了被调用的函数。当您将某些内容打印到控制台而不返回时,该函数将继续运行,直到最后一个循环执行为止。

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

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

i=0number=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;
};
相关问题