当前位置: 首页 > news >正文

JavaScript 二维数组初始化

引言

在 JavaScript 中处理二维数组是常见需求,尤其是在算法题、矩阵运算或数据表格处理中。然而,许多开发者(尤其是初学者)容易在初始化二维数组时陷入“引用陷阱”。本文将从实际错误案例出发,逐步剖析问题根源,并提供多种正确、优雅的初始化方式。


一、一个典型的错误案例

错误代码示例

let d_arr = [];
for (let i = 0; i < 4; i++) {for (let j = 0; j < 4; j++) {d_arr[i][j] = 1; // ❌ 报错:Cannot set property '0' of undefined}
}

错误原因

在第一次循环中,d_arr[0]undefined,无法直接通过 [j] 赋值。必须先在每一行初始化一个子数组。


二、另一种常见但错误的“解决方案”

代码示例

let temp_arr = [0, 0, 0, 0];
let d_arr = [];
for (let i = 0; i < 4; i++) {d_arr[i] = temp_arr; // ❌ 错误:每一行都引用了同一个数组
}
d_arr[0][1] = 1;
console.log(d_arr);
// 输出:[[0,1,0,0], [0,1,0,0], [0,1,0,0], [0,1,0,0]]

问题分析

由于数组是引用类型,d_arr 的每一行都指向同一个 temp_arr。修改任意一行都会影响所有行。


三、二维数组初始化方法

方法一:使用 new Array() 逐行初始化

let d_arr = new Array(4); // 创建长度为4的数组
for (let i = 0; i < 4; i++) {d_arr[i] = new Array(4); // 每一行创建一个长度为4的子数组for (let j = 0; j < 4; j++) {d_arr[i][j] = 0; // 初始化为0}
}

方法二:使用 fillmap(推荐)

const n = 4;
const matrix = new Array(n).fill(0).map(() => new Array(n).fill(0));

方法三:使用 Array.from

const n = 4;
const matrix = Array.from({ length: n }, () => Array.from({ length: n }, () => 0));

四、代码示例

假设我们要初始化一个 3x3 的矩阵,表示欧洲三个城市的温度数据(单位:℃):

// 初始化一个3x3的二维数组,存储伦敦、巴黎、柏林三城市的三天温度
const temperatures = Array.from({ length: 3 }, () => new Array(3).fill(0));// 赋值示例
temperatures[0] = [12, 14, 13]; // 伦敦
temperatures[1] = [15, 16, 14]; // 巴黎
temperatures[2] = [10, 11, 9];  // 柏林console.log(temperatures);
// 输出:
// [
//   [12, 14, 13],
//   [15, 16, 14],
//   [10, 11, 9]
// ]

五、UML 关系图:二维数组的内存结构

二维数组
行0
行1
行2
元素0
元素1
元素2
元素0
元素1
元素2
元素0
元素1
元素2

六、单词与短语表

单词/短语音标词性词根/词缀释义搭配例子
array/əˈreɪ/名词-数组two-dimensional arraylet arr = new Array(4);
initialize/ɪˈnɪʃəlaɪz/动词initial + -ize初始化initialize an arrayInitialize the matrix with zeros.
reference/ˈrefrəns/名词/动词refer + -ence引用reference typeArrays are reference types.
matrix/ˈmeɪtrɪks/名词matrix矩阵identity matrixWe need a 4x4 matrix.
dimension/daɪˈmenʃn/名词di- + mensio维度two-dimensionalA 2D array has two dimensions.
element/ˈelɪmənt/名词-元素array elementAccess each element with [i][j].
nested/ˈnestɪd/形容词nest + -ed嵌套的nested loopUse a nested loop to iterate.
shallow copy/ˈʃæloʊ ˈkɒpi/名词短语shallow + copy浅拷贝make a shallow copyAvoid shallow copies of arrays.
deep copy/diːp ˈkɒpi/名词短语deep + copy深拷贝perform a deep copyWe need a deep copy of the array.

结语

正确初始化二维数组是 JavaScript 开发中的基础技能,也是避免隐蔽错误的关键。希望本文能帮助你彻底理解并掌握这一知识点。如果你有更多问题或更好的实践方法,欢迎在评论区交流讨论。

http://www.dtcms.com/a/449888.html

相关文章:

  • 手机网站建设制作教程wordpress二维码插件付费
  • 静态网站开发百科做58类网站需要多少钱
  • 【Ubuntu】清理空间的几种方法
  • 做网站必须有云虚拟主机公司画册
  • 网安面试题收集(1)
  • 深入理解操作系统:从管理思想到进程本质(7000字深入剖析,通俗易懂)
  • 基于汇编实现led点灯-51单片机-stc89c52rc
  • wordpress站点地址灰显视频教学网站开发需求分析
  • Docker进行达梦数据库部署
  • 怎么做才能发布网站洛克设计平台
  • 建网站一般最低多少钱永久免费域名注册网站
  • 室内设计师上网第一站ctoc的网站有哪些
  • 2025 年 AI + 编程工具实战:用新工具提升 50% 开发效率
  • TCP拥塞控制
  • 数集探秘:“有理“谜题的巧妙拆解与证明
  • 网站购物车功能关于珠海网站建设的优势
  • 【深度学习|学习笔记】从机器学习范式看神经网络能解决什么?(一)
  • 辽宁网站定制企业创业平台
  • UNIX下C语言编程与实践38-UNIX 信号操作:signal 函数与信号捕获函数的编写
  • dede 分类信息网站 模板wordpress怎么装插件
  • 分布式系统实战:电商平台架构演进
  • 基于YOLOv8+CNN的智能停车场车牌识别系统(视频图片均可)(完整实现,附完整可直接运行代码)
  • @ComponentScan组件扫描原理
  • 沈阳制作网站的公司网站开发要什么
  • MySQL 8.0存储引擎选型指南
  • 做移动端网站设计网站怎样制作
  • redis的哨兵机制简单问题
  • 打造自己的中秋 AR 赏月应用:实现虚实融合的节日体验
  • 建设网站学什么建设考试的报名网站
  • 色块网站设计在家做的网站编辑