如何在JavaScript/TypeScript中创建任意大小的m×n二维数组?
在JavaScript/TypeScript中创建独立的m×n二维数组
问题根源
你用new Array(m).fill(new Array(n).fill(0))创建数组时,所有行都是同一个数组的引用——fill方法会把传入的数组实例重复赋值给每一行,所以修改任意一行的元素都会同步影响所有行。
更简洁高效的解决方案
以下几种方法都能生成每行独立的二维数组,且比你之前的写法更简洁:
使用
Array.from(推荐)Array.from可以直接通过映射函数生成每行的新数组,无需额外处理稀疏数组:// JavaScript const arr = Array.from({ length: m }, () => Array(n).fill(0));TypeScript中可以添加类型标注,让类型更清晰:
// TypeScript const arr: number[][] = Array.from({ length: m }, () => Array(n).fill(0));用
fill()配合map
先给外层数组填充undefined(fill()无参数时默认填充),再通过map生成每行的新数组:const arr = new Array(m).fill().map(() => new Array(n).fill(0));这种写法避免了展开运算符(
...)创建中间数组的开销,比你之前的方法更高效。手动循环生成(适合自定义初始化逻辑)
如果需要更灵活的初始化(比如填充不同值),可以用循环:const arr = []; for (let i = 0; i < m; i++) { arr.push(new Array(n).fill(0)); }这种方法逻辑直观,调试起来也更方便。
效率对比
Array.from和fill().map的性能相近,都优于使用展开运算符的写法(因为展开会创建额外的中间数组)。- 手动循环在处理超大数组时,性能和前两种方法差距不大,但代码可读性稍弱。
内容的提问来源于stack exchange,提问作者at.
相关产品推荐
相关产品推荐

