ZetCode

JavaScript slice 方法

最后修改于 2025 年 4 月 4 日

在本文中,我们将展示如何使用 JavaScript 中的 slice 方法提取数组元素。

数组切片

数组切片是将数组的一部分提取到新数组中的操作。slice 方法返回数组的一部分的浅拷贝到一个新的数组对象中。原始数组不会被修改。

该方法接受两个可选参数:开始索引和结束索引。开始索引是包含的,而结束索引是不包含的。如果没有提供参数,则返回整个数组的副本。

负索引可用于指示从数组末尾开始的位置。 当您需要处理数组的子集,同时保留原始数据时,slice 方法通常很有用。

基本切片示例

以下示例演示了 slice 方法的基本用法。

main.js
const fruits = ['apple', 'banana', 'orange', 'mango', 'kiwi'];
const citrus = fruits.slice(1, 3);

console.log(fruits);  // Original array unchanged
console.log(citrus);  // New sliced array

我们创建一个水果数组,并从索引 1 到 3(不包括 3)提取元素。 原始数组保持不变。slice() 方法返回一个包含所选元素的新数组。

$ node main.js
[ 'apple', 'banana', 'orange', 'mango', 'kiwi' ]
[ 'banana', 'orange' ]

使用负索引

slice 方法可以接受负索引来从数组的末尾开始计数。

main.js
const numbers = [1, 2, 3, 4, 5, 6, 7, 8];
const lastThree = numbers.slice(-3);

console.log(numbers);
console.log(lastThree);

我们使用负的开始索引提取最后三个元素。 当只提供一个负参数时,slice 从该位置提取到末尾。 负索引从数组的末尾向后计数。

$ node main.js
[ 1, 2, 3, 4, 5, 6, 7, 8 ]
[ 6, 7, 8 ]

省略结束参数

当省略结束参数时,slice 提取到数组的末尾。

main.js
const colors = ['red', 'green', 'blue', 'yellow', 'purple'];
const fromSecond = colors.slice(1);

console.log(colors);
console.log(fromSecond);

我们从索引 1 开始到末尾对数组进行切片。 当省略结束参数时,默认为数组长度。 这对于获取某个位置之后的所有元素很有用。

$ node main.js
[ 'red', 'green', 'blue', 'yellow', 'purple' ]
[ 'green', 'blue', 'yellow', 'purple' ]

复制整个数组

slice 方法可以创建整个数组的浅拷贝。

main.js
const original = [10, 20, 30];
const copy = original.slice();

console.log(original);
console.log(copy);
console.log(original === copy);  // false - different references

调用 slice 没有任何参数会创建一个包含所有元素的新数组。 这会创建一个浅拷贝,其中基本值被复制,但对象引用在数组之间共享。

$ node main.js
[ 10, 20, 30 ]
[ 10, 20, 30 ]
false

结合正负索引

slice 方法可以在同一次调用中结合正负索引。

main.js
const letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const middle = letters.slice(2, -2);

console.log(letters);
console.log(middle);

我们提取从索引 2 开始到倒数第二个元素(不包括)的元素。 这演示了正负索引如何协同工作以选择特定范围。

$ node main.js
[ 'a', 'b', 'c', 'd', 'e', 'f', 'g' ]
[ 'c', 'd', 'e' ]

来源

数组切片 - 语言参考

在本文中,我们演示了如何使用 slice() 方法在 JavaScript 中提取数组元素。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 自 2007 年以来,我一直在撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出 所有 JS 数组函数。