1.slice的用法
slice() 方法可从已有的数组中返回选定的元素。
slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
注意:
1.slice(start,end) 方法不会改变原始数组
2.start是开始复制的起始位置,默认为0,end是结束位置,默认为数组长度
3.如果传入的参数是负数 代表从后往前数 比如-1指的是最后一项元素
4.slice是浅拷贝
2.slice使用示例
const arr = [1, 2, 3, 4, 5] console.log(arr.slice());//[1, 2, 3, 4, 5] console.log(arr.slice(8));//[] console.log(arr.slice(-1));//[5] console.log(arr.slice(-3, -1));//[3,4]
3.slice的实现
Array.prototype.mySlice = function (start = 0, end = this.length) { //声明一个空数组,作为复制后返回值 const res = []; //如果起始位置越界,返回空数组 if (start >= this.length) return res //处理start和end小于0的情况 if (start < 0) { start = start + this.length < 0 ? 0 : start + this.length; } if (end < 0) { end = end + this.length < 0 ? 0 : end + this.length; } //复制start至end的元素到res中 包括arr[start] 不包括arr[end] for (let i = start; i < end; i++) { res.push(this[i]) } return res }
4.splice的用法
splice() 方法用于添加、修改或删除数组中的元素。
返回值是删除掉的数组元素 如果删除0个 返回空数组
注意:这种方法会改变原始数组。
splice方法的参数为(delIndex,deleteCount,insert1,insert2...)
delIndex是要删除的元素下标,为负时,处理与slice相同,大于等于数组长度时,为数组长度
deleteCount默认为0,是要从delIndex处删除的元素个数,这些被删除的元素将作为splice函数的返回值
之后的所有参数insert1,insert2...都是从delIndex处插入到原始数组的元素
5.splice的实现
Array.prototype.mySplice = function (delIndex, count = 0, ...inserts) { //如果没有传入要插入的元素,将inserts设为空数组 inserts = inserts || [] //判断delIndex if (delIndex >= this.length) delIndex = this.length if (delIndex < 0) { delIndex = delIndex + this.length < 0 ? 0 : delIndex + this.length; } //获取返回值 const res = this.slice(delIndex, delIndex + count); //获取在delIndex处删除到某些元素,并插入新元素之后的新数组This const This = [...this.slice(0, delIndex), ...inserts, ...this.slice(delIndex + count)] /* this替换处理开始 使用This替换旧的原始数组this */ //当this长度大于This时,无法全部覆盖,先将this多出的的部分删除 while (this.length > This.length) { //删除this的最后一个元素,一直到this长度和This长度相同时,结束循环 this.pop() } //delIndex之前this的元素与This相同,从delIndex之后全部重新赋值,使用This中的元素覆盖this的元素,达到改变this的效果 for (let i = delIndex; i < This.length; i++) { this[i] = This[i] } /* this替换完毕 */ //返回被删除的元素 return res; }