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

JavaScript 二维数组操作示例

一、什么是二维数组?

在编程中,二维数组是一种特殊的数据结构,它本质上是"数组的数组"。与一维数组存储线性序列不同,二维数组以表格形式组织数据,包含行和列两个维度。

概念理解

可以将二维数组想象成一个Excel表格:

  • 整个表格是一个二维数组
  • 每一行是一个一维数组
  • 每个单元格是行数组中的一个元素
// 表格类比
// 行0: [A1, A2, A3]
// 行1: [B1, B2, B3]
// 行2: [C1, C2, C3]

二、二维数组的三种定义方法

方法一:直接定义法

适合已知所有元素且数据量较少的情况。

// 直接定义一个3x3的二维数组
var matrix = [["A1", "A2", "A3"],["B1", "B2", "B3"],["C1", "C2", "C3"]
];console.log(matrix[1][2]); // 输出: "B3" - 获取第2行第3列的元素

优点:代码简洁直观,一目了然
缺点:不适合动态或大规模数据初始化

方法二:动态扩展法

适合需要逐步构建二维数组的场景。

// 创建一个空的二维数组
var dynamicArray = new Array();// 扩展第一行
dynamicArray[0] = new Array();
dynamicArray[0][0] = "第一行第一列";
dynamicArray[0][1] = "第一行第二列";// 扩展第二行
dynamicArray[1] = new Array();
dynamicArray[1][0] = "第二行第一列";
dynamicArray[1][1] = "第二行第二列";console.log(dynamicArray.length); // 输出: 2 - 数组有2行

方法三:循环创建法

最适合处理大量数据或从外部源(如JSON)获取数据的情况。

// 定义数组的行数和列数
var rows = 4;
var cols = 3;// 创建二维数组
var twoDArray = new Array(rows);for (var i = 0; i < rows; i++) {twoDArray[i] = new Array(cols);for (var j = 0; j < cols; j++) {twoDArray[i][j] = "位置[" + i + "][" + j + "]";}
}// 访问特定元素
console.log(twoDArray[2][1]); // 输出: "位置[2][1]"

三、二维数组的结构图解

以下通过UML类图展示二维数组的结构关系:

包含
1
*
包含
1
*
TwoDArray
-Array rows
+getElement(row, col)
+setElement(row, col, value)
Row
-Array cells
+getCell(col)
+setCell(col, value)
Cell
-Object value
+getValue()
+setValue(value)

四、多维数组的扩展

JavaScript支持创建三维甚至更高维度的数组。

// 创建三维数组示例
var threeDArray = new Array(2); // 第一维:2个元素for (var x = 0; x < 2; x++) {threeDArray[x] = new Array(3); // 第二维:每个元素有3个子元素for (var y = 0; y < 3; y++) {threeDArray[x][y] = new Array(4); // 第三维:每个子元素有4个元素for (var z = 0; z < 4; z++) {threeDArray[x][y][z] = "值[" + x + "][" + y + "][" + z + "]";}}
}console.log(threeDArray[1][2][3]); // 输出: "值[1][2][3]"

五、获取数组真实长度的方法

JavaScript数组的length属性有时无法反映真实元素数量,特别是当数组包含非数字键时。

// 创建包含混合键的数组
var mixedArray = [];
mixedArray[0] = "数字键值";
mixedArray["name"] = "字符串键值"; // 非数字键不影响lengthconsole.log(mixedArray.length); // 输出: 1 - 仅计算数字索引// 获取数组真实元素数量的函数
function getActualArraySize(arr) {var count = 0;for (var key in arr) {if (arr.hasOwnProperty(key)) {count++;}}return count;
}console.log(getActualArraySize(mixedArray)); // 输出: 2 - 计算所有键

六、实际应用场景

场景一:游戏棋盘表示

// 创建8x8棋盘
var chessboard = new Array(8);for (var i = 0; i < 8; i++) {chessboard[i] = new Array(8);for (var j = 0; j < 8; j++) {// 初始化棋盘格子chessboard[i][j] = {piece: null,color: (i + j) % 2 === 0 ? "white" : "black"};}
}// 放置棋子
chessboard[0][0].piece = " rook";   // 车
chessboard[0][1].piece = "knight"; // 马
// ... 其他棋子初始化

场景二:数据处理与转换

// 从多个一维数组创建二维数组
var names = ["张三", "李四", "王五"];
var ages = [25, 30, 28];
var departments = ["技术部", "市场部", "财务部"];var staffData = [];for (var i = 0; i < names.length; i++) {staffData[i] = [names[i], ages[i], departments[i]];
}console.log(staffData);
// 输出: [["张三", 25, "技术部"], ["李四", 30, "市场部"], ["王五", 28, "财务部"]]

七、性能考虑与最佳实践

  1. 内存使用:二维数组比一维数组占用更多内存
  2. 访问速度:连续内存访问比随机访问更快
  3. 预分配空间:提前确定数组大小可提高性能
// 性能优化示例:预分配内存
var optimizedArray = new Array(1000); // 预分配1000行for (var i = 0; i < 1000; i++) {optimizedArray[i] = new Array(100); // 每行预分配100列// 后续操作...
}

八、单词与短语表

单词/短语音标词性释义词根/词缀同义词/反义词例句
Array/əˈreɪ/名词数组-List, CollectionJavaScript arrays can hold multiple values.
Dimension/daɪˈmenʃn/名词维度di- + mension-A 2D array has two dimensions: rows and columns.
Initialize/ɪˈnɪʃəlaɪz/动词初始化initial + -izeSet up, PrepareYou should initialize variables before using them.
Index/ˈɪndeks/名词索引-SubscriptArray indices start from zero in JavaScript.
Element/ˈelɪmənt/名词元素-Item, ComponentEach element in an array can be accessed by its index.
Loop/luːp/名词/动词循环-IterateUse a for loop to iterate through array elements.
Matrix/ˈmeɪtrɪks/名词矩阵-Grid, TableA matrix is a rectangular array of numbers.
Multidimensional/ˌmʌltidaɪˈmenʃənl/形容词多维的multi- + dimensional-JavaScript supports multidimensional arrays.
Property/ˈprɒpəti/名词属性proper + -tyAttribute, CharacteristicThe length property returns the number of elements in an array.
http://www.dtcms.com/a/597588.html

相关文章:

  • 【数值分析】13-线性方程组的解法-基本概念、迭代解法(1)
  • 解决规模化核心难题!Nature Commun.新策略实现大面积、高性能钙钛矿纳米线光电探测器
  • 门户网站模板想做网站怎么做
  • 专业门户网站的规划与建设无锡网站建设 首选众诺
  • 淄川响应式网站建设线上推广营销策划
  • zerotier内网穿透部署(rockylinux部署本地服务器)超详细~~~
  • Ubuntu环境中LLaMA Factory 的部署与配置—构建大语言模型微调平台
  • 建婚恋网站需要多少钱新会网站建设公司
  • MI50运算卡使用llama.cpp的ROCm后端运行Qwen3-Coder-30B-A3B的速度测试
  • 【图像处理基石】如何入门图像压缩编码技术?
  • 网站建设与管理实施方案企业建设网站怎么做账
  • 网站制作与网站建设实际报告文案发布平台
  • 开源项目合并新分支和本地修改指南
  • GJOI 11.5 题解
  • 网站建设是什么语言wan网站建设
  • 个人网站域名怎么起企业官方网站建设的流程
  • CTFHub Web进阶-Json Web Token通关5:修改签名算法
  • 华为OD机试 双机位A卷 - 上班之路 (JAVA Python C++ JS GO)
  • CEVA-DSP开发初识(一)
  • 峰均比降低技术(CFR)
  • 如何删除网站备案号房地产政策
  • 盐城网盐城网站建设站建设wordpress视频解析接口
  • 【CPKCOR-RA8D1】Home Assistant 物联网 ADC 电压温度计
  • STM32外设学习--DMA直接存储器读取(AD扫描程序,DMA搬运)--学习笔记。
  • 贵州网站开发制作公司开发公司各部门职责
  • FreeRTOS 学习:(十八)FreeRTOS 中断管理
  • 做外贸网站 怎么收钱池州哪里做网站
  • 介绍一下 机器人坐标转换的 RT 矩阵
  • 网站备案换公司吗盐山县网站建设
  • 为智能制造护航:SASE如何重塑制造业网络安全与连接