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之后,如果删除元素与新添加元素个数不等,原数组长度会发生改变
如果有问题或者描述不清的朋友们,欢迎留言一起探讨,如果本文有给你们帮助请帮忙点个赞。