当前位置:首页 > JavaScript

js实现splice

2026-04-05 14:22:21JavaScript

js实现splice

JavaScript 实现 splice 方法

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

js实现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 到末尾的所有元素,此实现需额外处理。

标签: jssplice
分享给朋友:

相关文章

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js实现排序

js实现排序

数组排序方法 JavaScript提供了内置的sort()方法用于数组排序。默认情况下,sort()将元素转换为字符串并按照Unicode码点排序。对于数字排序,需传入比较函数。 const num…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…