跳到主要内容

JavaScript 数组的 slice() 方法详解

slice() 方法返回一个新数组对象,为原数组的一部分的浅拷贝。

示例

let numbers = [2, 3, 5, 7, 11, 13, 17];

// 从索引 3 到 5 创建另一个数组的切片
let newArray = numbers.slice(3, 6);
console.log(newArray);

// 输出:[ 7, 11, 13 ]

slice() 语法

slice() 方法的语法为:

arr.slice(start, end);

这里的 arr 是一个数组。

slice() 参数

slice() 方法接受以下参数:

  • start(可选)- 选择的起始索引。如果未提供,默认从 0 开始。
  • end(可选)- 选择的结束索引(不包含)。如果未提供,默认结束于最后一个元素的索引。

slice() 返回值

  • 返回包含提取元素的新数组。

示例 1:JavaScript slice() 方法

let languages = ["JavaScript", "Python", "C", "C++", "Java"];

// 切分整个数组(从开始到结束)
let new_arr = languages.slice();
console.log(new_arr); // [ 'JavaScript', 'Python', 'C', 'C++', 'Java' ]

// 从第三个元素开始切分
let new_arr1 = languages.slice(2);
console.log(new_arr1); // [ 'C', 'C++', 'Java' ]

// 从第二个元素切分到第四个元素
let new_arr2 = languages.slice(1, 4);
console.log(new_arr2); // [ 'Python', 'C', 'C++' ]

输出

[ 'JavaScript', 'Python', 'C', 'C++', 'Java' ]
[ 'C', 'C++', 'Java' ]
[ 'Python', 'C', 'C++' ]

示例 2:JavaScript slice() 使用负索引

在 JavaScript 中,你也可以使用负的 startend 索引。最后一个元素的索引为 -1,倒数第二个元素的索引为 -2,依此类推。

const languages = ["JavaScript", "Python", "C", "C++", "Java"];

// 从开始到倒数第二个元素切分数组
let new_arr = languages.slice(0, -1);
console.log(new_arr); // [ 'JavaScript', 'Python', 'C', 'C++' ]

// 从倒数第三个元素开始切分数组
let new_arr1 = languages.slice(-3);
console.log(new_arr1); // [ 'C', 'C++', 'Java' ]

输出

[ 'JavaScript', 'Python', 'C', 'C++' ]
[ 'C', 'C++', 'Java' ]

示例 3:JavaScript slice() 方法与数组元素为对象

slice() 方法以以下方式浅拷贝数组元素:

  • 它将对象引用复制到新数组。(例如,嵌套数组)因此,如果引用的对象被修改,变化在返回的新数组中也是可见的。
  • 它将字符串和数字的值复制到新数组。
let human = {
name: "David",
age: 23,
};

let arr = [human, "Nepal", "Manager"];
let new_arr = arr.slice();

// 原始对象
console.log(arr[0]); // { name: 'David', age: 23 }

// 在新数组中修改对象
new_arr[0].name = "Levy";

// 变化反映出来
console.log(arr[0]); // { name: 'Levy', age: 23 }

输出

{ name: 'David', age: 23 }
{ name: 'Levy', age: 23 }

推荐阅读: JavaScript Array.splice()