在 JavaScript 中,splice() 方法是一个非常强大的数组方法,它可以用于删除、插入和替换数组中的元素。当你想要在数组的指定位置插入新元素时,splice() 方法能很好地完成这个任务,但一不小心,任务结果也会让你莫名其妙。下面我先为你详细介绍使用 splice() 方法插入新元素的相关内容。
语法
array.splice(start, deleteCount, item1, item2, ..., itemN);
start:必需参数,表示开始插入或删除元素的索引位置。如果该值为负数,则从数组末尾开始计算,例如-1表示最后一个元素。deleteCount:必需参数,表示要删除的元素个数。如果设为0,则不会删除任何元素,仅执行插入操作。item1, item2, ..., itemN:可选参数,表示要插入到数组中的新元素。
示例代码
1. 在数组开头插入元素
const fruits = ['apple', 'banana', 'cherry'];
// 在索引 0 的位置插入 'mango' 和 'kiwi',不删除任何元素
fruits.splice(0, 0, 'mango', 'kiwi');
console.log(fruits);
// 输出: ['mango', 'kiwi', 'apple', 'banana', 'cherry']
代码解释:
start为0,表示从数组的第一个位置开始操作。deleteCount为0,表示不删除任何元素。- 后面的
'mango'和'kiwi'是要插入的新元素。
2. 在数组中间插入元素
const numbers = [1, 2, 4, 5];
// 在索引 2 的位置插入 3,不删除任何元素
numbers.splice(2, 0, 3);
console.log(numbers);
// 输出: [1, 2, 3, 4, 5]
代码解释:
start为2,表示从数组的第三个位置(索引从 0 开始)开始操作。deleteCount为0,表示不删除任何元素。3是要插入的新元素。
3. 在数组末尾插入元素
const colors = ['red', 'green'];
// 在数组末尾(索引为 colors.length)插入 'blue',不删除任何元素
colors.splice(colors.length, 0, 'blue');
console.log(colors);
// 输出: ['red', 'green', 'blue']
代码解释:
start为colors.length,表示从数组的末尾开始操作。deleteCount为0,表示不删除任何元素。'blue'是要插入的新元素。
注意事项
- 插入多个元素时,只需在
splice()方法中依次列出这些元素即可。
坑点何在?
读完方法,聪明的你应该有所察觉了。
splice() 方法会直接修改原数组,并返回一个由被删除元素组成的数组。如果没有删除任何元素,则返回一个空数组。
如果在数组遍历中使用splice函数,,如使用for循环,forEach方法,那么恭喜你,你有可能不小心就把原数组修改了,那么接下来的循环,会根据新的数组来操作,看到不及预期的输出,你都不会承认是自己的问题。
当然,同数量的替换,可以巧妙绕过此问题。
如何解决
- 新复制一个数组,循环原数组,修改新数组
- 在删除或新增时做标记,在遍历完成后,再统一修改数组。
希望在我的这篇文章中,你不仅学会强大的数组编辑器函数splice的使用,并且还知道这把双刃剑的另一面,再尔在快乐的代码世界遨游。