ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-16 15:34:26  阅读:278  来源: 互联网

标签:重构 splice 删除 lastArr ++ js length let 数组


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
}

标签:重构,splice,删除,lastArr,++,js,length,let,数组
来源: https://blog.csdn.net/gjzxlihaibo/article/details/120799104

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有