实现 slice JS


实现 JavaScript 的 slice 方法
JavaScript 的 slice 方法用于提取数组或字符串的一部分,返回一个新数组或字符串,而不修改原始数据。以下是实现 slice 功能的几种方法。
实现数组的 slice 方法
function sliceArray(array, start, end) {
const result = [];
const length = array.length;
start = start === undefined ? 0 : start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
end = end === undefined ? length : end < 0 ? Math.max(length + end, 0) : Math.min(end, length);
for (let i = start; i < end; i++) {
result.push(array[i]);
}
return result;
}
实现字符串的 slice 方法
function sliceString(str, start, end) {
const length = str.length;
start = start === undefined ? 0 : start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
end = end === undefined ? length : end < 0 ? Math.max(length + end, 0) : Math.min(end, length);
let result = '';
for (let i = start; i < end; i++) {
result += str[i];
}
return result;
}
使用 ES6 的 Array.from 实现
function sliceArrayES6(array, start, end) {
const length = array.length;
start = start === undefined ? 0 : start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
end = end === undefined ? length : end < 0 ? Math.max(length + end, 0) : Math.min(end, length);
return Array.from({ length: end - start }, (_, i) => array[start + i]);
}
注意事项
- 如果未提供
start,默认从索引 0 开始。 - 如果未提供
end,默认提取到末尾。 - 负数索引表示从末尾开始计算。
- 如果
start或end超出范围,会自动调整到有效索引。
以上方法模拟了原生 slice 的行为,可以根据需求选择适合的实现方式。






