JavaScript编写makeGrid网格生成函数返回undefined数组,求修正
问题分析与修复
你的代码有两个关键问题导致输出不符合预期:
列数组填充错误
原代码第一个循环里用numColumns[i]填充arrayX,但numColumns是数字类型(比如传入的2),不是数组,数字没有索引属性,所以每次push的都是undefined,这就是子数组出现undefined的原因。应该直接把循环变量ipush进去,才能得到[1,2]这样的列数组。数组引用共享问题(可选但重要)
第二个循环里反复push同一个arrayX,虽然当前需求下表面结果正确,但如果后续修改arrayX,所有子数组都会跟着变化——因为它们指向同一个内存地址。最好每次push时创建一个新的数组副本。
修复后的代码
function makeGrid(numColumns, numRows){ const arrayY = [] // 先创建列数组模板 const columnTemplate = [] for (let i=1; i<=numColumns; i++){ columnTemplate.push(i) } // 循环创建行,每次复制模板数组 for(let j=1; j<=numRows; j++){ // 用扩展运算符创建新数组副本 arrayY.push([...columnTemplate]) // 或者用slice():arrayY.push(columnTemplate.slice()) } return arrayY } result = makeGrid(2,3) console.log(result) // 输出 [[1,2],[1,2],[1,2]]
更简洁的写法(可选)
如果想简化代码,可以用嵌套循环直接构建二维数组:
function makeGrid(numColumns, numRows){ const grid = [] for (let row = 0; row < numRows; row++){ const currentRow = [] for (let col = 1; col <= numColumns; col++){ currentRow.push(col) } grid.push(currentRow) } return grid }
内容的提问来源于stack exchange,提问作者Imam
相关产品推荐
相关产品推荐

