数组解构
103 数组解构(Destructuring Arrays)笔记
一、课程背景与学习说明
- 所属模块:现代 JavaScript 语法学习,聚焦 “内置数据结构与高级运算符”,是后续实战项目的基础铺垫
- 案例载体:以意大利餐厅 “Classico Italiano” 模拟配送应用为案例,仅关注 JavaScript 逻辑,不构建 UI(下一节将通过带优质 UI 的项目学习数组方法)
- 学习目标:掌握数组解构的概念、基础语法、进阶技巧及实际应用场景,替代传统数组元素提取方式,提升代码简洁性
二、数组解构核心概念
2.1 定义
- 是 ES6 新增特性,用于将数组或对象中的值 “解包” 到单独变量,本质是将复杂数据结构分解为更小的变量结构
- 核心价值:简化数组元素提取流程,避免重复使用
数组[索引]的繁琐写法
2.2 传统提取方式 vs 解构方式对比(例题 1)
传统方式(通过索引提取)
1 2 3 4 5 6 7
| const arr = [2, 3, 4];
const A = arr[0]; const B = arr[1]; const C = arr[2]; console.log(A, B, C);
|
问题:若需提取多个元素,需重复写arr[索引],代码冗余。
解构方式(一次性提取)
1 2 3 4 5
| const arr = [2, 3, 4];
const [X, Y, Z] = arr; console.log(X, Y, Z);
|
注意:解构不会修改原数组,仅通过 “模式匹配” 将数组元素映射到对应变量。
三、数组解构基础用法
3.1 提取指定位置元素(跳过中间元素)
场景
只需提取数组中部分元素,无需创建无用变量。
例题 2
1 2 3 4 5 6 7 8 9 10 11
| const restaurant = { categories: ["意大利菜", "披萨", "素食"], };
const [mainCat, secondaryCat] = restaurant.categories; console.log(mainCat, secondaryCat);
const [firstCat, , thirdCat] = restaurant.categories; console.log(firstCat, thirdCat);
|
关键:通过在解构位置留 “空位”(即两个逗号之间不写变量),实现跳过中间元素。
3.2 解构时设置默认值(例题 3)
场景
当数组长度未知(如从 API 获取数据),避免提取不存在的元素时得到undefined。
语法
1
| const [变量1 = 默认值, 变量2 = 默认值, ...] = 数组
|
代码示例
1 2 3 4 5 6 7 8 9 10
| const arr1 = [8, 9];
const [P = 1, Q = 1, R = 1] = arr1; console.log(P, Q, R);
const arr2 = [8, 9, 10]; const [P2 = 1, Q2 = 1, R2 = 1] = arr2; console.log(P2, Q2, R2);
|
四、数组解构进阶技巧
4.1 实现变量快速交换(例题 4)
传统方式(需临时变量)
1 2 3 4 5 6 7
| let a = 10; let b = 20;
const temp = a; a = b; b = temp; console.log(a, b);
|
解构方式(无需临时变量)
1 2 3 4 5
| let a = 10; let b = 20;
[a, b] = [b, a]; console.log(a, b);
|
关键:右侧创建包含待交换变量(顺序倒置)的临时数组,左侧通过解构重新赋值。
4.2 接收函数返回的 “多值”(例题 5)
场景
函数本质只能返回一个值,但可通过返回数组 + 解构,实现 “模拟多值返回”。
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13
| const restaurant = { starterMenu: ["蒜香面包", "沙拉", "意式浓汤"], mainMenu: ["披萨", "意面", "牛排"], order(starterIndex, mainIndex) { return [this.starterMenu[starterIndex], this.mainMenu[mainIndex]]; }, };
const [starter, mainCourse] = restaurant.order(2, 0); console.log(starter, mainCourse);
|
4.3 嵌套数组解构(例题 6)
场景
数组中包含子数组,需提取子数组内的元素。
语法
1
| const [外层变量1, [内层变量1, 内层变量2], ...] = 嵌套数组
|
代码示例
1 2 3 4 5 6 7 8 9 10
| const nestedArr = [2, 4, [5, 6]];
const [i, , j] = nestedArr; console.log(i, j);
const [x, , [y, z]] = nestedArr; console.log(x, y, z);
|
五、总结:数组解构的核心应用场景
| 场景 |
传统方式问题 |
解构优势 |
| 提取数组指定元素 |
重复写arr[索引],冗余 |
一行代码完成多元素提取 |
| 变量交换 |
需临时变量,逻辑繁琐 |
无临时变量,代码简洁 |
| 函数 “多值返回” |
需手动拆解返回的数组 |
直接映射到变量,可读性高 |
| 嵌套数组元素提取 |
需多层arr[索引][子索引] |
模式匹配,层级清晰 |
| 处理未知长度数组 |
易得到undefined |
可设置默认值,避免异常 |