Array:splice()

503 阅读2分钟

splice的定义

splice() 通过删除替换现有元素或者添加新的元素来修改数组, 并返回由修改的元素组成的新数组。

Note: 该方法会改变原数组

语法

Array.splice(start, deleteCount, item1, items, ...)

参数

const arr = [1, 2, 3, 4, 5];

start: 指定操作元素的起始位置(从0开始)

          1 开始位置为0 

    arr.splice(0); 

    console.log(arr); // []

          2 开始位置大于数组长度,则从数组末尾添加内容:

    arr.splice(6);

    console.log(arr); // [1, 2, 3, 4, 5]

    arr.splice(6, 0, 6) 

    console.log(arr); // [1, 2, 3, 4, 5, 6];

          3 开始位置 start < 0, 表示从数组末尾开始的第n个元素, 等同于arr.length - Math.abs(start)

    arr.splice(-2); 

    console.log(arr); // [1, 2, 3]    

    arr.splice(3); 

    console.log(arr); // [1, 2, 3]

    从上图2个栗子可以看出,当 start 为 -2 时,从数组末尾作为起始位置(在数组中该元素为 4),开始
    操作,删除4以及4之后的元素。并且 start = -2 等同于 start = 3(数组长度 - start的绝对值)

         4 开始位置 start < 0, 并且 其绝对值 > 数组长度(Math.abs(start) > arr.length), 等同于起始位置为0(start = 0)

    arr.splice(-6);

    console.log(arr); // []

    arr.splice(0); 

    console.log(arr); // []

deleteCount: 表示要移除的数组元素的个数

          1 deleteCount为2删除start开始的2个元素

    arr.splice(1, 2); 

    console.log(arr); // [1, 4, 5]

          2 deleteCount为0则不删除任何元素

    arr.splice(1, 0); 

    console.log(arr); // [1, 2, 3, 4, 5]

          3 deleteCount > start之后的元素总数,则删除 start 以及 start 之后的所有元素

    arr.splice(1, 4); 

    console.log(arr); // [1]

          4 deleteCount 省略,则删除 start 以及 start 之后的所有元素

    arr.splice(1); 

    console.log(arr); // [1]

          5 deleteCount < 0,则不删除任何元素

    arr.splice(1, -1); 

    console.log(arr); // [1]

总结:当 deleteCount <= 0 时,不删除任何元素, 当deleteCount省略或者deleteCount > start之后的元素总数,删除start 以及 start 之后的所有元素

item1, item2 添加进数组的元素,如果没有指定,则不添加元素

    arr.splice(1, 2, 6, 7); 

    console.log(arr); // [1, 6, 7, 4, 5]

    start 为 1,表示起始元素为2,deleteCount 为 2,表示删除2个元素,item1 = 6, item2 = 7, 
    所以从元素2开始,删除2个元素,并且添加2个新元素(6 和 7)

返回值

返回由被删除的元素组成的一个数组

    const res = arr.splice(1, 2, 6, 7, 8);

    console.log(arr); // [1, 6, 7, 8, 4, 5]
    console.log(res); // [2, 3]
    console.log(arr.length); // 6

Note: 执行splice之后,如果删除元素与新添加元素个数不等,原数组长度会发生改变

如果有问题或者描述不清的朋友们,欢迎留言一起探讨,如果本文有给你们帮助请帮忙点个赞。