splice 方法 是一种数组方法
splice方法的所有操作会改变原数组,返回值是删除的原数组中的数据
传一个参数的时候,是从这个参数位置的下标开始,删除数组后面的所有数组
传两个参数的时候,第二个参数是删除的个数,是从第一个参数位置开始删除对应的个数
传三个参数的时候,从第三个参数开始,是在删除位置依次插入第三个参数开始的数据,先删除,再插入,哪里删除,哪里插入
当不传入参数的时候,原数组不发生改变,返回值是undefined
以下为底层原理:
Array.prototype.mySplice = function(){
//先判断有没有传参,没有返回 undefined
if(arguments.length == 0) return
// 拿到 n 是从第几位删除的下标
let n = arguments[0]
// 创建一个空数组 用来存返回值 返回被删除的数据
let newArr = []
// 如果没有写第二个参数,直接修改原数组 length
if(!arguments[1]){
for(let i = n,j=0;i < this.length ; i++,j++){
newArr[j] = this[i]
}
this.length = n
return newArr
}
// b 是需要删除几位,是个数
let b = arguments[1]
let lastArr = [] // 创建一个数组,用来存最后要覆盖原数组的数据
for(let i = 0; i < n; i++) lastArr[i] = this[i] // 先把最前面不删除的几个拿到
for(let j = 2; j < arguments.length ; j++){ // 把要插入的数据,遍历,插入到新数组中
lastArr.push(arguments[j])
}
for(let i = n,k=0; k < b ;i++,k++){
if(n + k > this.length-1) break // 判断如果删除的个数,加上从第几位删除的和,大于原数组长的时候,打断循环
newArr[k] = this[i] // 得到被删除的数据组成的数组 返回值就是这个
}
for(let i = n + b; i < this.length; i++){ // n + b 就是最后面不需要删除的数据开始的下标 值肯定小于数组最后一位的下标,逐个遍历,push到新数组中
lastArr.push(this[i])
}
// 最后修改原数组的值 先把原数组的 length 长度 修改成 新数组一样的长度,然后再遍历
this.length = lastArr.length
for(let i = 0; i < lastArr.length ; i ++){
this[i] = lastArr[i]
}
return newArr
}