slice和splice的区别
在JavaScript中,slice
和 splice
是 Array
对象的两个方法,它们都有助于操作数组,但它们的功能和用途有所不同。
1. slice
slice
方法用于从已有的数组返回选定的元素的一个浅拷贝到一个新数组对象中,而不改变原数组。
语法
array.slice(start, end)
参数
start
(可选): 开始截取的位置,如果是负数,表示从数组结尾开始计算的位置。end
(可选): 结束截取的位置(不包括此位置),如果是负数,表示从数组结尾开始计算的位置。
返回值
- 返回一个新的数组,包含从
start
到end
之间(不包括end
)的元素。
示例
const numbers = [1, 2, 3, 4, 5];
const sliced = numbers.slice(1, 3); // 截取索引1到2之间的元素
console.log(sliced); // 输出: [2, 3]
console.log(numbers); // 输出: [1, 2, 3, 4, 5] (原数组不变)
2. splice
splice
方法用于删除、替换或添加数组中的元素。它会直接修改原数组,并返回一个包含被删除元素的新数组。
语法
array.splice(start, deleteCount[, item1[, item2[, ...[, itemN]]]])
参数
start
: 必须,从该位置开始修改数组。deleteCount
: 必须,要删除的元素数量。如果设置为 0,则不会删除任何元素。item1, item2, ..., itemN
: 可选,从start
位置开始插入的新元素。
返回值
- 返回一个数组,包含被删除的元素。
示例
-
删除元素:
const numbers = [1, 2, 3, 4, 5]; const removed = numbers.splice(1, 2); // 从索引1开始删除2个元素 console.log(removed); // 输出: [2, 3] console.log(numbers); // 输出: [1, 4, 5] (原数组被修改)
-
替换元素:
const numbers = [1, 2, 3, 4, 5]; const replaced = numbers.splice(1, 2, 'a', 'b'); // 从索引1开始删除2个元素,并插入'a'和'b' console.log(replaced); // 输出: [2, 3] console.log(numbers); // 输出: [1, 'a', 'b', 4, 5] (原数组被修改)
-
添加元素:
const numbers = [1, 2, 3, 4, 5]; const added = numbers.splice(2, 0, 'a', 'b'); // 从索引2开始添加元素,不删除任何元素 console.log(added); // 输出: [] console.log(numbers); // 输出: [1, 2, 'a', 'b', 3, 4, 5] (原数组被修改)
总结
slice
用于从数组中提取一部分元素,并返回一个新的数组。原数组保持不变。splice
用于直接修改数组,可以用来删除、替换或添加元素。它会改变原数组,并返回一个包含被删除元素的新数组。