js slice实现
slice 方法的基本用法
slice 是 JavaScript 数组和字符串的一个常用方法,用于提取部分内容并返回一个新数组或字符串,不改变原数组或字符串。
语法:
array.slice(start, end)
string.slice(start, end)
start(可选):提取的起始位置(包含),默认值为 0。end(可选):提取的结束位置(不包含),默认值为数组或字符串的长度。
数组的 slice 实现
slice 方法会返回一个新数组,包含从 start 到 end(不包括 end)的元素。
const arr = [1, 2, 3, 4, 5];
const subArr = arr.slice(1, 3); // [2, 3]
注意事项:
- 如果
start为负数,则从数组末尾开始计算(-1表示最后一个元素)。 - 如果
end为负数,同样从数组末尾计算。 - 如果
end省略,则提取到数组末尾。
字符串的 slice 实现
字符串的 slice 方法类似,返回一个新字符串,包含从 start 到 end(不包括 end)的字符。

const str = "Hello, World!";
const subStr = str.slice(0, 5); // "Hello"
注意事项:
- 负索引同样适用,从字符串末尾计算。
- 如果
end省略,则提取到字符串末尾。
手动实现数组的 slice
如果需要手动实现一个类似 slice 的功能,可以按照以下逻辑编写:
function customSlice(array, start = 0, end = array.length) {
const result = [];
// 处理负索引
start = start < 0 ? Math.max(array.length + start, 0) : Math.min(start, array.length);
end = end < 0 ? Math.max(array.length + end, 0) : Math.min(end, array.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]
手动实现字符串的 slice
类似地,可以手动实现字符串的 slice:

function customStringSlice(str, start = 0, end = str.length) {
// 处理负索引
start = start < 0 ? Math.max(str.length + start, 0) : Math.min(start, str.length);
end = end < 0 ? Math.max(str.length + end, 0) : Math.min(end, str.length);
let result = "";
for (let i = start; i < end; i++) {
result += str[i];
}
return result;
}
const str = "Hello, World!";
console.log(customStringSlice(str, 0, 5)); // "Hello"
常见用途
-
复制数组或字符串:
const arr = [1, 2, 3]; const copy = arr.slice(); // [1, 2, 3] -
提取部分数据:
const str = "2023-10-05"; const year = str.slice(0, 4); // "2023" -
处理负索引:
const arr = [1, 2, 3, 4]; const lastTwo = arr.slice(-2); // [3, 4]
slice 是一个高效且灵活的方法,适用于多种场景,尤其在需要提取子集而不修改原数据时非常有用。






