js实现splice


实现 JavaScript 的 splice 方法
Array.prototype.splice 是 JavaScript 中用于修改数组的原生方法,它可以实现删除、插入或替换数组元素。以下是手动实现 splice 的核心逻辑:
功能概述
- 删除元素:从指定索引开始删除一定数量的元素。
- 插入元素:在指定索引处插入新元素。
- 替换元素:删除旧元素并插入新元素。
- 返回值:返回被删除的元素组成的数组。
实现代码
function customSplice(array, start, deleteCount, ...items) {
// 处理负数索引
const normalizedStart = start < 0
? Math.max(array.length + start, 0)
: Math.min(start, array.length);
// 处理未指定 deleteCount 的情况
const normalizedDeleteCount = Math.min(
Math.max(Number(deleteCount) || 0, 0),
array.length - normalizedStart
);
const deletedElements = array.slice(
normalizedStart,
normalizedStart + normalizedDeleteCount
);
// 分割数组:前段、待删除段、后段
const before = array.slice(0, normalizedStart);
const after = array.slice(normalizedStart + normalizedDeleteCount);
// 合并前段、新插入元素、后段
const newArray = [...before, ...items, ...after];
// 修改原数组
array.length = 0;
array.push(...newArray);
return deletedElements;
}
参数说明
- array:目标数组(需手动传入,模拟原生方法)。
- start:开始操作的索引(支持负数)。
- deleteCount:要删除的元素数量(可选)。
- ...items:要插入的新元素(可选)。
边界处理
- 负数索引会从数组末尾计算。
- 若
deleteCount未提供或为 0,仅插入元素。 - 若
deleteCount超出可删除范围,仅删除至数组末尾。
使用示例
const arr = [1, 2, 3, 4, 5];
const deleted = customSplice(arr, 1, 2, 'a', 'b');
console.log(arr); // [1, 'a', 'b', 4, 5]
console.log(deleted); // [2, 3]
与原生的区别
- 原生
splice是数组方法,此实现需手动传入数组。 - 此实现通过重新构建数组实现修改,而非直接操作原数组内存(仅演示逻辑)。
通过此实现可以深入理解 splice 的内部机制,适用于学习或特殊场景定制。






