JavaScript打印星号三角形时输出末尾多余空行如何解决
问题根因
最后多出的空行来自循环逻辑的冗余处理:每完成一行星号拼接你就追加一个\n换行符,当循环执行到最后一行时,依然会在末尾多拼一个换行符,最终打印时就会在三角形最后一行下方多出一个空白行。
可行修复方案
你可以根据自己的代码习惯选任意一种:
- 条件判断加换行
仅在当前遍历的不是最后一行时,才追加换行符,从根源上避免末尾多拼接换行,修改后代码如下:
function drawTriangle(size) { let string = ""; // 声明存储输出内容的字符串变量 for (let i = 1; i <= size; i++) { // 外层循环控制行数,遍历到输入的size值为止 for (let j = 0; j < i; j++) { // 内层循环控制当前行的星号数量 string += "*"; // 逐颗拼接当前行星号 } // 非最后一行才追加换行 if (i !== size) { string += "\n"; } } console.log(string); // 打印最终拼接的三角形 }
- 输出前移除末尾冗余换行
不用调整原有循环逻辑,在打印前调用字符串的trimEnd()方法,直接清除字符串末尾多余的换行、空白字符即可:
function drawTriangle(size) { let string = ""; for (let i = 1; i <= size; i++) { for (let j = 0; j < i; j++) { string += "*"; } string += "\n"; } // 清除末尾多余空白后再打印 console.log(string.trimEnd()); }
- 数组拼接法(更简洁)
把每一行的星号作为单独元素存入数组,最后用换行符作为分隔符拼接数组,join方法只会在数组元素之间插入分隔符,不会在末尾额外添加,从逻辑上避免多余换行:
function drawTriangle(size) { const lines = []; for (let i = 1; i <= size; i++) { // 直接用repeat方法生成对应数量的星号,省掉内层循环 lines.push("*".repeat(i)); } console.log(lines.join("\n")); }
内容的提问来源于stack exchange,提问作者Nitron
相关产品推荐
相关产品推荐

