如何编写函数生成n×n的null填充嵌套数组?现有错误代码求指导
解决JavaScript生成n×n null嵌套数组的问题
嘿,我帮你排查下这段代码的问题,再给你几个靠谱的实现方案~
你的代码问题分析
- 首先,你把
item定义成了字符串'null',但我们需要的是JavaScript的原始值null,不是字符串类型的"null"哦 - 数组没有
repeat()方法,只有字符串才有这个方法,所以array1.repeat(n)会直接抛出错误,这就是代码无法运行的直接原因 - 就算忽略上面的问题,
item.repeat(n)得到的是类似"nullnullnull"的长字符串,根本不是包含n个null的数组,逻辑完全偏离了需求
正确的实现方式
方式1:基础循环写法(容易理解)
这种写法一步步构建数组,新手也能轻松看懂:
function generateMatrix(n) { const solution = []; // 外层循环创建每一行 for (let i = 0; i < n; i++) { const row = []; // 内层循环给每一行添加n个null for (let j = 0; j < n; j++) { row.push(null); } solution.push(row); } return solution; }
方式2:ES6简洁写法(一行搞定)
用Array.from()或者Array.fill()配合map来简化代码,更优雅:
function generateMatrix(n) { // 先创建n个元素的数组,每个元素是独立的、包含n个null的数组 return Array.from({ length: n }, () => Array(n).fill(null)); } // 或者另一种等价的简洁写法: // function generateMatrix(n) { // return Array(n).fill().map(() => Array(n).fill(null)); // }
⚠️ 这里要避个坑:不能直接写Array(n).fill(Array(n).fill(null)),因为这样所有行都会引用同一个数组,修改其中一行的元素会影响所有行,这是浅拷贝导致的问题!
测试一下:调用generateMatrix(3),就会返回[[null,null,null],[null,null,null],[null,null,null]],完全符合你的需求~
内容的提问来源于stack exchange,提问作者VisualXZ
相关产品推荐
相关产品推荐

