今天有个删除的功能,中了slice的坑了 ,记混淆了slice不改变原数组了,所以再拿出来捋一捋吧
场景区别
- 均可以从原数组获取某片段
- 改原数组用splice
- 只是数组片段用slice
splice 功能
用于数组的新增、删除,会改变原数组
用法
- array.splice(index, howmany, item1,…,itemX)
- index 必须,插入/删除元素位置
- howmany 删除的元素,如果未定义,则删除从index至原数组的末尾
- item1,…,itemX 要添加的元素
DMEO1: 从指定位置,删除至数组末尾
let a = [1, 2, 3, 4, 5]
a.splice(1)
// 输出[2,3, 4,5]
// a自身发生变化:[1]
DEMO2: 数组中已index,移除元素当前元素或者多个元素
// 例如1:移除当前元素
let a = [1, 2, 3, 4, 5]
a.splice(1, 1)
// 输出[2]
// a自身发生变化:[1, 3, 4, 5]
// 例如2: 移除多个元素
let a = [1, 2, 3, 4, 5]
a.splice(2, 4)
// 输出[3, 4, 5]
// a自身发生变化:[1, 2]
DEMO3: 指定位置删除、插入
// 移除数组的第2,第3个元素,并在数组第二个位置添加新元素:
let a = [1, 2, 3, 4, 5]
a.splice(1, 2, 'a', 'b', 'c')
// 输出[2, 3]
// a自身发生变化:[1, 'a', 'b', 'c', 4, 5]
slice 功能
返回被选中的元素, 原数组无影响
用法:
- arr.slice(开始位置,结束位置),
- 索引从 0开始, 结束位置不包括,
- 开始位置、结束位置参数可选
- 负值则从数组的末尾选择
- 字符串的截取
Demo1: 参数正整数
let a = [1, 2, 3, 4, 5]
a.slice(1, 3)
// 输出 [2, 3]
Demo2 : 省略结束位置参数,则选中开始至数组末尾的所有元素
let a = [1, 2, 3, 4, 5]
a.slice(1)
// 输出 [2, 3, 4, 5]
DEMO3: 啥参数也不写,
并不是深拷贝,只能对第一层进行拷贝,会出现拷贝不完全的情况
let a = [1, 2, 3, 4, 5]
let b = a.slice()
a === b
// false
DEMO3: 负数
let a = [1, 2, 3, 4, 5]
a.slice(-1)
// [5]
a.slice(-3)
// [3, 4, 5]
a.slice(-4, -1)
// [2, 3, 4]