实现 slice JS
实现 JavaScript 的 slice 方法
JavaScript 的 slice 方法用于从数组中提取一部分元素,返回一个新数组,而不修改原数组。以下是实现 slice 方法的详细步骤:
基本功能实现
slice 方法接受两个参数:start 和 end(可选),表示提取的起始和结束位置(不包括 end)。实现时需处理负数索引和默认值。
function slice(array, start, end) {
const length = array == null ? 0 : array.length;
if (!length) return [];
start = start == null ? 0 : start;
end = end === undefined ? length : end;
// 处理负数索引
start = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
end = end < 0 ? Math.max(length + end, 0) : Math.min(end, length);
const result = [];
for (let i = start; i < end; i++) {
result.push(array[i]);
}
return result;
}
边界条件处理
- 如果
start或end为负数,将其转换为从数组末尾开始的索引。 - 如果
start或end超出数组长度,将其限制在有效范围内。 - 如果
start大于end,返回空数组。
示例测试
const arr = [1, 2, 3, 4, 5];
console.log(slice(arr, 1, 3)); // [2, 3]
console.log(slice(arr, -2)); // [4, 5]
console.log(slice(arr, 2, 10)); // [3, 4, 5]
扩展为原型方法
若需将 slice 实现为数组的原型方法,可直接扩展 Array.prototype:

Array.prototype.mySlice = function(start, end) {
const length = this.length;
start = start == null ? 0 : start;
end = end === undefined ? length : end;
start = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
end = end < 0 ? Math.max(length + end, 0) : Math.min(end, length);
const result = [];
for (let i = start; i < end; i++) {
result.push(this[i]);
}
return result;
};
注意事项
- 确保不修改原数组,始终返回新数组。
- 处理稀疏数组时,未赋值的元素会以
undefined形式返回。 - 此实现不涉及深拷贝,若数组包含对象,新数组中的对象仍为引用。






