求助:使用JavaScript数组实现带前置空格的8x8网格
修复你的8x8网格生成代码
先帮你梳理下原代码里的几个关键问题,再给出能正常运行的修复版本:
- 初始化的
board是空数组,直接访问board[i][j]会报错——因为board[i]还没被定义成子数组,根本没法存元素 - 循环条件用了
<= cols/<= rows,会生成9行9列(从0到8),超出了你要的8x8范围 - 每次循环单独打印单个
#,没法组成连续的行,自然出不来网格效果 - 没给每个
#添加前置空格,不符合你的需求
下面是修复后的代码,我会附上详细说明:
function myfunction() { const cols = 8; const rows = 8; const board = []; for (let i = 0; i < rows; i++) { // 先给当前行创建一个空数组,避免索引报错 board[i] = []; let rowContent = ''; for (let j = 0; j < cols; j++) { // 给#前面加上空格,并存入board数组 board[i][j] = ' #'; // 把当前行的所有元素拼接成字符串 rowContent += board[i][j]; } // 打印整一行,形成网格的一行 console.log(rowContent); } // 如果需要查看完整的board数组结构,可以取消下面的注释 // console.log(board); } // 调用函数执行 myfunction();
关键修复细节:
- 用
let/const声明变量(避免全局变量污染,这是JS的基础最佳实践) - 外层循环里先初始化
board[i] = [],确保子数组存在后再存元素 - 循环条件改成
i < rows和j < cols,刚好生成8行8列的网格 - 每个元素设为
' #',直接满足“每个#前有一个空格”的要求 - 把每行的元素拼接成字符串后再打印,这样每行是连续的8个带空格的#,最终输出整齐的网格
运行这段代码,你就能在控制台看到符合预期的8x8网格啦~
内容的提问来源于stack exchange,提问作者Alex Dis
相关产品推荐
相关产品推荐

