js实现splice
JavaScript 实现 splice 方法
Array.prototype.splice 是 JavaScript 中用于修改数组的原生方法,它可以实现删除、插入或替换数组元素。以下是手动实现 splice 的核心逻辑:
核心逻辑
splice 方法的主要功能包括:

- 从指定位置开始删除一定数量的元素。
- 在删除的位置插入新元素。
- 返回被删除的元素组成的数组。
实现代码
function customSplice(array, start, deleteCount, ...items) {
// 处理负数索引
const actualStart = start < 0
? Math.max(array.length + start, 0)
: Math.min(start, array.length);
// 处理默认删除数量
const actualDeleteCount = Math.min(
Math.max(deleteCount, 0),
array.length - actualStart
);
// 存储被删除的元素
const deletedElements = [];
for (let i = actualStart; i < actualStart + actualDeleteCount; i++) {
deletedElements.push(array[i]);
}
// 计算移动元素的长度
const insertCount = items.length;
const moveCount = array.length - actualStart - actualDeleteCount;
// 调整数组长度
if (insertCount > deleteCount) {
const diff = insertCount - actualDeleteCount;
for (let i = array.length - 1; i >= actualStart + actualDeleteCount; i--) {
array[i + diff] = array[i];
}
} else if (insertCount < deleteCount) {
const diff = actualDeleteCount - insertCount;
for (let i = actualStart + actualDeleteCount; i < array.length; i++) {
array[i - diff] = array[i];
}
array.length -= diff;
}
// 插入新元素
for (let i = 0; i < items.length; i++) {
array[actualStart + i] = items[i];
}
// 处理剩余元素的移动
if (insertCount !== actualDeleteCount) {
const offset = insertCount - actualDeleteCount;
for (let i = actualStart + actualDeleteCount; i < array.length; i++) {
array[i + offset] = array[i];
}
}
return deletedElements;
}
使用示例
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会直接修改原数组,此实现也遵循这一特性。 - 如果未指定
deleteCount,原生splice会删除从start到末尾的所有元素,此实现需额外处理。






