2021-06-04 23:39:45
使用splice()修改数组内容并返回删除项的核心方法是调用array.splice(start, deleteCount),该方法会直接修庆岁改原数组,并返回被删除元素组成的新数组。 以下是具体说明与示例:
一、splice()的语法与核心功能start:必需,指定修改的起始索引(从0开始)。
deleteCount:可选,要删除的元素数量。若为0则不删除;若省略则从start到数组末尾的所有元素均被删除。
item1, item2, ...:灶慎可选,要插入的新元素,从start位置开始添加。
删除元素并获取删除项
let fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry'];let deletedFruits = fruits.splice(2, 2); // 从索引2开始删除2个元素console.log(fruits); // ['apple', 'banana', 'elderberry'](原数组被修改)console.log(deletedFruits); // ['cherry', 'date'](返回被删除的元素)仅插入元素(不删除)
let numbers = [1, 2, 3, 4];let addedItems = numbers.splice(2, 0, 99, 100); // 在索引2处插入元素,不删除console.log(numbers); // [1, 2, 99, 100, 3, 4]console.log(addedItems); // [](未删除元素,返回空数组)替换元素
let settings = ['主题:亮色', '字体:小', '语言:英文'];let replacedItem = settings.splice(0, 1, '主题:暗色'); // 替换索隐差敬引0的元素console.log(settings); // ['主题:暗色', '字体:小', '语言:英文']console.log(replacedItem); // ['主题:亮色'](返回被替换的旧元素)splice():
修改原数组:直接对原数组进行删除、插入或替换操作。
返回值:被删除的元素组成的新数组(若无删除则返回空数组)。
应用场景:需原地修改数组且需获取删除项时(如待办事项删除、动态插入数据)。
slice():
不修改原数组:仅返回原数组的浅拷贝(从start到end(不含)的部分)。
返回值:新数组,包含原数组的子集。
应用场景:需获取数组副本而不影响原数据时(如UI渲染、数据备份)。
类比理解:
应用场景
根据索引删除元素:如删除待办事项列表中的指定项。
在特定位置插入元素:如在购物车中插入赠品。
替换元素:如更新数组中的某个配置项。
实现队列/栈行为:虽可用push/pop/shift/unshift,但splice()更灵活(如从中间移除元素)。
潜在问题
修改原数组的副作用:若数组被多处引用,修改可能导致不可预料的bug(如UI不一致)。
循环中删除元素的索引问题:正向遍历时删除元素会导致后续索引错乱,建议倒序遍历或使用其他方法(如filter())。
性能开销:对大型数组操作时,splice()需移动大量元素,可能影响性能。
参数理解错误:如deleteCount为0时表示插入,省略时表示删除到末尾,易引发混淆。
为避免splice()的副作用,现代开发中更倾向使用遵循“不可变性”原则的方法:
选择建议: