js 数组方法splice底层原理(重构)

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
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值