跳到主要内容

数组 slice 方法

slice() 用于截取数组的一部分,返回新数组,不修改原数组。

基本用法

const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

// 截取从索引 2 到 5 的元素(不含 5)
arr.slice(2, 5); // [2, 3, 4]

// 从索引 5 开始到末尾
arr.slice(5); // [5, 6, 7, 8, 9]

// 从末尾开始截取
arr.slice(-3); // [7, 8, 9]
arr.slice(-5, -2); // [5, 6, 7]

负索引

const arr = [0, 1, 2, 3, 4, 5];

// 负索引从数组末尾开始
arr.slice(-2); // [4, 5]
arr.slice(-4, -1); // [2, 3, 4]

复制数组

const original = [1, 2, 3];

// 浅拷贝整个数组
const copy = original.slice();
// 或
const copy2 = [...original];

// 验证
copy.push(4);
console.log(original); // [1, 2, 3]
console.log(copy); // [1, 2, 3, 4]

提取前 N 个/后 N 个

const arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// 前 5 个
const first5 = arr.slice(0, 5); // [1, 2, 3, 4, 5]

// 后 5 个
const last5 = arr.slice(-5); // [6, 7, 8, 9, 10]

// 中间部分
const middle = arr.slice(3, 7); // [4, 5, 6, 7]

与 splice 的区别

const arr1 = [1, 2, 3, 4, 5];
const arr2 = [1, 2, 3, 4, 5];

// slice - 不修改原数组
const sliced = arr1.slice(1, 4);
console.log(arr1); // [1, 2, 3, 4, 5] 原数组不变
console.log(sliced); // [2, 3, 4]

// splice - 修改原数组
const spliced = arr2.splice(1, 3);
console.log(arr2); // [1, 5] 原数组被修改
console.log(spliced); // [2, 3, 4] 返回被删除的元素