深入解析 JavaScript 中的 slice() 和 splice() 方法
slice() 和 splice() 是 JavaScript 中两个常用的数组方法,但它们的功能和用法截然不同。本文将详细分析它们的区别、用法、应用场景,并提供丰富的示例。
一、slice() 方法
1. 定义
slice() 方法用于从数组中提取部分元素,并返回一个新的数组,不会修改原数组。
2. 语法
array.slice([start], [end])
start(可选):开始提取的位置(包含该索引),默认为0。end(可选):停止提取的位置(不包含该索引),默认为数组长度。
3. 示例
const arr = [1, 2, 3, 4, 5];
// 提取索引 1 到索引 3(不包含 3)
const newArr = arr.slice(1, 3);
console.log(newArr); // 输出 [2, 3]
console.log(arr); // 原数组未变,输出 [1, 2, 3, 4, 5]
4. 特点
- 不会修改原数组。
- 提取出的部分包括
start索引,但不包括end索引。 end超出数组长度时,提取到数组末尾。start和end支持负数,表示从数组末尾开始计数。
5. 负索引示例
const arr = [10, 20, 30, 40, 50];
// 提取最后两个元素
const newArr = arr.slice(-2);
console.log(newArr); // 输出 [40, 50]
二、splice() 方法
1. 定义
splice() 方法用于添加、删除或替换数组中的元素,会直接修改原数组。
2. 语法
array.splice(start, deleteCount, [item1, item2, ...])
start:开始操作的位置(包含该索引)。deleteCount:要删除的元素个数。如果为0,则不删除任何元素。item1, item2, ...(可选):要插入的新元素。
3. 示例 1:删除元素
const arr = [1, 2, 3, 4, 5];
// 从索引 1 开始删除 2 个元素
const removed = arr.splice(1, 2);
console.log(removed); // 输出 [2, 3]
console.log(arr); // 原数组被修改,输出 [1, 4, 5]
4. 示例 2:插入元素
const arr = [1, 4, 5];
// 从索引 1 开始插入两个新元素
arr.splice(1, 0, 2, 3);
console.log(arr); // 输出 [1, 2, 3, 4, 5]
5. 示例 3:替换元素
const arr = [1, 2, 3, 4, 5];
// 从索引 2 开始替换 1 个元素
arr.splice(2, 1, 100);
console.log(arr); // 输出 [1, 2, 100, 4, 5]
6. 特点
- 会修改原数组。
- 可以删除、插入、替换元素,功能非常灵活。
deleteCount为0时不删除元素,仅插入。
三、slice() 与 splice() 的对比
| 方法 | 作用 | 是否修改原数组 | 返回值 | 典型用途 |
|---|---|---|---|---|
slice() |
提取数组中的部分元素,生成新数组 | 否 | 新数组 | 提取子数组 |
splice() |
删除、插入、替换数组中的元素 | 是 | 被删除的元素数组 | 修改数组内容 |
四、综合示例
以下示例展示如何使用 slice() 和 splice() 来操作数组:
const arr = [10, 20, 30, 40, 50, 60];
// 使用 slice 提取索引 1 到 4 的元素(不包含 4)
const slicedArr = arr.slice(1, 4);
console.log('slice 结果:', slicedArr); // 输出 [20, 30, 40]
// 使用 splice 删除索引 2 开始的 2 个元素
const splicedArr = arr.splice(2, 2);
console.log('splice 删除的元素:', splicedArr); // 输出 [30, 40]
console.log('原数组:', arr); // 输出 [10, 20, 50, 60]
五、实际应用场景
1. slice() 的应用
-
浅拷贝数组:
const arr = [1, 2, 3]; const copy = arr.slice(); console.log(copy); // 输出 [1, 2, 3] -
分页功能:
const items = [1, 2, 3, 4, 5, 6, 7, 8]; const page = items.slice(0, 3); // 每页显示 3 个 console.log(page); // 输出 [1, 2, 3]
2. splice() 的应用
-
删除指定索引的元素:
const arr = [1, 2, 3, 4, 5]; arr.splice(2, 1); // 删除索引 2 的元素 console.log(arr); // 输出 [1, 2, 4, 5] -
插入新元素:
const arr = [1, 2, 5]; arr.splice(2, 0, 3, 4); // 插入 3 和 4 console.log(arr); // 输出 [1, 2, 3, 4, 5]
总结
slice()适用于创建数组副本或从数组中提取部分元素,它不会影响原数组。splice()用于在数组中删除、插入或替换元素,并会直接修改原数组。
通过合理选择和使用 slice() 和 splice(),可以有效地操作数组数据,提升代码的灵活性和可维护性。
订阅 FreeMac
每周精选:Mac 高效技巧、免费替代付费软件、开发者工具推荐。用对你的 MacBook,省钱 + 提效。