当前位置:首页 > JavaScript

js实现splice

2026-04-05 14:22:21JavaScript

JavaScript 实现 splice 方法

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

核心逻辑

splice 方法的主要功能包括:

js实现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 实现方法 JavaScript 是一种广泛使用的编程语言,适用于网页开发、服务器端编程以及移动应用开发。以下是几种常见的 JavaScript 实现方法: 网页交互功能 使用…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…