为什么在我真正想要的之后得到 "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]
的数组,它将有一个 length
的 3
。
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.
您的第一个循环从 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。
剧透警告:我发布了 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]
的数组,它将有一个 length
的 3
。
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.
您的第一个循环从 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。