猿问

为什么我在实际想要的东西之后得到一个“未定义”的行?

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


stairs(4)

应该返回


   #

  ##

 ###

####

我得到了这个代码,虽然它基本上没问题,但我最终得到了一个“未定义”的行。所以:


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) 运行时, 它返回以下内容:


     #

    ##

   ###

  ####

 #####

######

undefined

困扰我的是“未定义”这个词,它阻止我提交slution。我只猜测一个可能的解决方案是替换第二个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)时,它会返回它应该返回的内容:


     #

    ##

   ###

  ####

 #####

######

虽然问题解决了,但我不明白为什么。我的问题是:为什么“未定义”一词出现在第一种情况下,为什么我所做的替换修复了它?感谢!


炎炎设计
浏览 139回答 4
4回答

弑天下

给定它的数组将具有 .[1, 2, 3]length3foo[0]是1foo[1]是2foo[2]是3既然你然后记录哪个是... .3 <= array.lengthfoo[3]undefined

慕容708150

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

慕标5832272

第一个循环从 1 到 n(n 次迭代)运行for (var i=1; i <=n; i++){&nbsp; &nbsp; &nbsp; &nbsp; // statements}而第二个循环从 0 到 n(总共 n+1 次迭代)for (var i=0; i<=stair.length; i++){&nbsp; &nbsp; &nbsp; &nbsp; console.log(stair[i])}由于楼梯中只有 n 个值,因此在第 n 次 + 1 次迭代中,将返回未定义。

慕妹3146593

你应该在数组上运行,直到像这样:stairi < stair.lengthfunction staircase(n) {&nbsp; var stair=[]; /*array of strings */&nbsp; for (var i=1; i <=n; i++){&nbsp; &nbsp; &nbsp; var step= " ".repeat(n-i).concat("#".repeat(i));&nbsp; &nbsp; &nbsp; stair.push(step);&nbsp; }&nbsp; for (var i=0; i<stair.length; i++){&nbsp; &nbsp; &nbsp; console.log(stair[i])&nbsp; }}staircase(6)根据MDN的说法:JavaScript 数组的索引为零:数组的第一个元素位于索引 0 处,最后一个元素的索引等于数组的 length 属性值减去 1。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答