You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript/TypeScript中创建任意大小的m×n二维数组?

在JavaScript/TypeScript中创建独立的m×n二维数组

问题根源

你用new Array(m).fill(new Array(n).fill(0))创建数组时,所有行都是同一个数组的引用——fill方法会把传入的数组实例重复赋值给每一行,所以修改任意一行的元素都会同步影响所有行。

更简洁高效的解决方案

以下几种方法都能生成每行独立的二维数组,且比你之前的写法更简洁:

  1. 使用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));
    
  2. 用fill()配合map
    先给外层数组填充undefined(fill()无参数时默认填充),再通过map生成每行的新数组:

    const arr = new Array(m).fill().map(() => new Array(n).fill(0));
    

    这种写法避免了展开运算符(...)创建中间数组的开销,比你之前的方法更高效。

  3. 手动循环生成(适合自定义初始化逻辑)
    如果需要更灵活的初始化(比如填充不同值),可以用循环:

    const arr = [];
    for (let i = 0; i < m; i++) {
      arr.push(new Array(n).fill(0));
    }
    

    这种方法逻辑直观,调试起来也更方便。

效率对比

  • Array.from和fill().map的性能相近,都优于使用展开运算符的写法(因为展开会创建额外的中间数组)。
  • 手动循环在处理超大数组时,性能和前两种方法差距不大,但代码可读性稍弱。

内容的提问来源于stack exchange,提问作者at.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:42:34