JavaScript中强如数组编辑器的splice函数,也是坑点满满

297 阅读3分钟

在 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方法,那么恭喜你,你有可能不小心就把原数组修改了,那么接下来的循环,会根据新的数组来操作,看到不及预期的输出,你都不会承认是自己的问题。

当然,同数量的替换,可以巧妙绕过此问题。

如何解决

  1. 新复制一个数组,循环原数组,修改新数组
  2. 在删除或新增时做标记,在遍历完成后,再统一修改数组。

希望在我的这篇文章中,你不仅学会强大的数组编辑器函数splice的使用,并且还知道这把双刃剑的另一面,再尔在快乐的代码世界遨游。