手写改变数组方法

目录

1、push(尾部添加)

2、pop(尾部删除)

 3、unshift(头部添加)

4、shift(头部删除)

5、reverse(数组顺序倒置)

6、splice

1、push(尾部添加)

   push 在数组最后一位添加一个或多个元素,并返回新数组的长度,改变原数组.
      Array.prototype.myPush = function () {
        for (let i = 0; i < arguments.length; i++) {
          this[this.length] = arguments[i]
        }
        return this.length
      }
      let arr = [1, 2, 3]
      arr.myPush(4)
      console.log(arr)

2、pop(尾部删除)

 // pop 删除数组的最后一位,并且返回删除的数据,会改变原来的数组
        Array.prototype.myPop = function () {
        let arr = this
        if (arr.length <= 0) return undefined
        let num = arr[this.length - 1]
        this.length = this.length - 1
        return num
      }
      let arr = [1, 3, 5]
      let res = arr.myPop()
      console.log(res, arr)

 3、unshift(头部添加)

  unshift 在数组第一位添加元素,并返回新数组的长度,改变原数组
      
      Array.prototype.myunshift = function () {
        let arrlg = this.length
        let arr = this
      因为数组从0开始的所以需要总长度减去1
        for (let i = arrlg + arguments.length - 1; i >= 0; i--) {
          if (i > arguments.length - 1) {
            arr[i] = arr[i - arguments.length]
          } else {
            arr[i] = arguments[i]
          }
        }
        return this.length
      }
      let arr = [1, 4, 6, 9]
      arr.myunshift(1)

4、shift(头部删除)

 shift 删除并返回数组的第一个元素。
      Array.prototype.myshift = function () {
        let arr = this
        if (arr.length == 0) return undefined
        let num = arr[0]
        for (let i = 1; i < arr.length; i++) {
          arr[i] = arr[i + 1]
        }
        this.length = this.length - 1
        return num
      }
      let arr = [1, 4, 6]
      let res = arr.shift()
      console.log(res, arr)

5、reverse(数组顺序倒置)

reverse 将数组的数据进行反转,并且返回反转后的数组,会改变原数组
      Array.prototype.myreverse = function () {
        let arr = this
        let arr1 = Array.from(arr)//把数组复制一次
        for (let i = 0; i < arr.length; i++) {
          arr[arr.length - i - 1] = arr1[i]
        }
        return arr
      }
      let arr = [1, 4, 5, 8]
      let res = arr.myreverse()
      console.log(res)

6、splice

Array.prototype.splice = function(start, n, ...args) {
  let ret = []
  // 左移
  for (let i = start; i < this.length; i++) {
    if (i < start + n) {
      ret.push(this[i])
    }
    this[i] = this[i + n]
  }
  // 删除多余长度
  for (let i = 0; i < n; i++) {
    this.pop()
  }

  // 剩余参数
  if (args.length) {
    let len = this.length
    // 右移
    for (let i = start; i < len; i++) {
      this[i + args.length] = this[i]
    }
    // 替换插入值
    for (let i = 0; i < args.length; i++) {
      this[i + start] = args[i]
    }
  }

  return ret
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值