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;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。