js slice实现
slice 方法的基本用法
slice() 是 JavaScript 数组的一个内置方法,用于提取数组的一部分并返回一个新数组,而不修改原数组。它可以接受两个参数:起始索引和结束索引(不包括结束索引本身)。
语法:
array.slice(start, end)
start:可选参数,表示提取的起始索引(从 0 开始)。如果为负数,则表示从数组末尾开始计算。end:可选参数,表示提取的结束索引(不包括该索引)。如果为负数,则表示从数组末尾开始计算。
示例:
const fruits = ['apple', 'banana', 'orange', 'grape', 'kiwi'];
// 提取索引 1 到 3(不包括 3)
const sliced1 = fruits.slice(1, 3); // ['banana', 'orange']
// 从索引 2 开始提取到末尾
const sliced2 = fruits.slice(2); // ['orange', 'grape', 'kiwi']
// 使用负数索引
const sliced3 = fruits.slice(-3, -1); // ['orange', 'grape']
实现自定义 slice 方法
以下是手动实现 slice 功能的代码示例:

function customSlice(array, start, end) {
const length = array.length;
let result = [];
// 处理 start 参数
start = start === undefined ? 0 : start;
start = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
// 处理 end 参数
end = end === undefined ? length : end;
end = end < 0 ? Math.max(length + end, 0) : Math.min(end, length);
// 提取元素
for (let i = start; i < end; i++) {
result.push(array[i]);
}
return result;
}
// 测试
const arr = [1, 2, 3, 4, 5];
console.log(customSlice(arr, 1, 3)); // [2, 3]
console.log(customSlice(arr, -3, -1)); // [3, 4]
注意事项
slice不会修改原数组,而是返回一个新数组。- 如果省略
end参数,则提取到数组末尾。 - 负数索引表示从数组末尾开始计算(例如,-1 表示最后一个元素)。
- 如果
start大于或等于end,返回空数组。
类似方法对比
splice():会修改原数组,并可以删除或添加元素。concat():用于合并数组,不涉及索引截取。substring()和substr():字符串的类似方法,但与数组的slice行为不同。






