js写出splice的底层逻辑
时间: 2023-11-07 22:05:50 浏览: 37
splice方法的底层逻辑可以通过以下步骤实现:
1. 首先,判断传入的起始索引(start)和删除元素的数量(deleteCount)是否超出数组的范围。
2. 根据传入的起始索引(start),计算实际的删除起始索引。如果传入的索引为负数,则从数组末尾开始计算。如果传入的索引大于数组长度,则将其设置为数组长度。
3. 创建一个空数组,用于存储被删除的元素。
4. 遍历数组,从删除起始索引开始,将被删除的元素添加到空数组中。删除元素的过程中,需要将数组中的元素向前移动,以填补被删除元素的空位。
5. 根据传入的新元素(如果有),将其插入到被删除元素的位置上。
6. 最后,返回被删除的元素组成的数组。
下面是使用JavaScript语言实现splice方法底层逻辑的代码:
```javascript
Array.prototype.spliceCustom = function(start, deleteCount, ...newItems) {
const arr = this.slice(); // 复制原数组
const length = arr.length;
let actualStart = start < 0 ? Math.max(length + start, 0) : Math.min(start, length);
let removed = [];
// 获取被删除的元素
for (let i = 0; i < deleteCount; i++) {
if (actualStart + i < length) {
removed.push(arr[actualStart + i]);
}
}
// 将数组元素前移
let len = Math.max(length - deleteCount, actualStart);
for (let i = actualStart; i < len; i++) {
arr[i] = arr[i + deleteCount];
}
// 插入新元素
let newItemsCount = newItems.length;
let newLength = length - deleteCount + newItemsCount;
for (let i = 0; i < newItemsCount; i++) {
arr[actualStart + i] = newItems[i];
}
// 截断数组
arr.length = newLength;
return removed;
};
```