使用二维数组与嵌套循环创建网格,结果数组出现undefined问题
解决二维网格数组出现undefined的问题
你的代码出现undefined的核心原因是:
- 定义的
columns数组是空的,没有任何元素,循环中访问columns[j]必然返回undefined - 代码里的
rows变量完全没被使用,属于冗余代码
修复方案1:填充默认值
如果需要给网格填充固定默认值(比如0),可以直接在赋值时指定:
function makeGrid(numColumns, numRows) { var grid = []; for(let i = 0; i < numRows; i++) { grid[i] = []; for(let j = 0; j < numColumns; j++) { grid[i][j] = 0; // 替换为你需要的默认值,比如null、''等 } } return grid; } console.log(makeGrid(3,4));
修复方案2:填充行列索引标识
如果需要区分每个格子的位置,可以用行号和列号的组合作为值:
function makeGrid(numColumns, numRows) { var grid = []; for(let i = 0; i < numRows; i++) { grid[i] = []; for(let j = 0; j < numColumns; j++) { grid[i][j] = `行${i+1}列${j+1}`; } } return grid; } console.log(makeGrid(3,4));
修复方案3:基于原逻辑完善(如果确实需要用到columns数组)
如果你原本想通过columns数组定义每列的初始值,需要先给columns填充内容:
function makeGrid(numColumns, numRows) { var grid = []; // 先初始化columns数组,比如填充默认值 var columns = new Array(numColumns).fill(0); for(let i = 0; i < numRows; i++) { grid[i] = [...columns]; // 直接复制columns数组作为行 } return grid; } console.log(makeGrid(3,4));
内容的提问来源于stack exchange,提问作者wawa.xxiv
相关产品推荐
相关产品推荐

