为什么在我真正想要的之后得到 "undefined" 行?

Why am I getting an "undefined" line after what I actually want?

剧透警告:我发布了 HackerRank 问题 "Staircase" 的解决方案。 所以,我试图解决初学者的挑战,用 JS 打印梯子。我必须编写一个函数,根据作为参数输入的步数打印梯形图。例如:

stairs(4)

应该return

   #
  ##
 ###
####

我得到了这段代码,虽然它基本上没问题,但最后我得到了 "undefined" 行。所以:

function staircase(n) {

    var stair=[]; /*array of strings */

    for (var i=1; i <=n; i++){
        var step= " ".repeat(n-i).concat("#".repeat(i));
        stair.push(step);

    }
    for (var i=0; i<=stair.length; i++){
        console.log(stair[i])
    }
}

当楼梯(6)是运行时,它return是这样的:

     #
    ##
   ###
  ####
 #####
######
undefined

困扰我的是"undefined"这个词,它阻止我提交解决方案。我只是猜测一个可能的解决方案是将第二个 for 循环声明中的“<=”替换为简单的“<”,并且做到了:

function staircase(n) {

    var stair=[]; /*array of strings */

    for (var i=1; i <=n; i++){
        var step= " ".repeat(n-i).concat("#".repeat(i));
        stair.push(step);

    }
    for (var i=0; i<stair.length; i++){
        console.log(stair[i])
    }
}

当我 运行 楼梯 (6) 时,它 return 应该是:

     #
    ##
   ###
  ####
 #####
######

虽然问题解决了,但我不明白为什么。我的问题是: 为什么 "undefined" 这个词出现在第一种情况下,为什么我做的替换修复了它?谢谢!

给定一个 [1, 2, 3] 的数组,它将有一个 length3

  • foo[0]1
  • foo[1]2
  • foo[2]3

因为 3 <= array.length 你然后记录 foo[3] 这是...... undefined.

你应该 运行 在 stair 数组上直到 i < stair.length 像这样:

function staircase(n) {

  var stair=[]; /*array of strings */

  for (var i=1; i <=n; i++){
      var step= " ".repeat(n-i).concat("#".repeat(i));
      stair.push(step);

  }
  for (var i=0; i<stair.length; i++){
      console.log(stair[i])
  }
}

staircase(6)

根据 MDN:

JavaScript arrays are zero-indexed: the first element of an array is at index 0, and the last element is at the index equal to the value of the array's length property minus 1.

Accessing array elements

您的第一个循环从 1 运行到 n(n 次迭代)

for (var i=1; i <=n; i++){
        // statements
}

而你的第二个循环从 0 运行到 n(总共 n+1 次迭代)

for (var i=0; i<=stair.length; i++){
        console.log(stair[i])
}

由于楼梯中只有 n 个值,因此在第 n+1 次迭代中,将返回 undefined。

当您在 for 循环中使用 i<=n 的 运行 楼梯 (6) 时,在最后一次迭代中,您正在访问第六个索引处的元素,该元素不存在,因此它是未定义的。数组索引从 0 开始,所以对于楼梯(6),索引最多只能达到 5。