学习js数据结构与算法-数组(2)

84 阅读2分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。

个人觉得要想进大厂,就必须学习了解算法和数据结构,经历了多次面试之后,也知道了算法和数据结构的重要性,所以,我也打算从今天开始,进入学习,下载了一下电子书,边看书,边跟着书的例子来敲一下代码,下面就开始总结一下对算法和数据结构的学习吧。

第二天:继续了解数组

数组的操作方法2

对于数组的操作方法,我们可以不使用js自带的方法。也可以使用各语言通用的操作(下面基本都是用数组实现,并没有往最好的实现去写),比如:

添加

首先创建一个数组

const arr = [1, 2, 3]
在尾部添加:
  • 通用的操作(下面的代码只应该用作示范,不应该在真实项目中使用),首先我们需要知道js自带push方法的特性,比如:它可以一个参数,也可以个多个参数,添加完毕之后,返回添加完后数组的长度

    1. // 直接添加一个
      arr[3] = 4 // [1,2,3,4]
      
    2. // 实现可以添加多个push方法
      Array.prototype.myPush = function (...value) {
        for(let i = 0; i < value.length; i++) {
          this[this.length] = value[i]
        }
        return this.length
      }
      arr.myPush(4) // [1,2,3,4]
      
  • js方法

    arr.push(4)
    
在头部添加
  • 通用的操作(下面的代码只应该用作示范,不应该在真实项目中使用),首先我们需要知道js自带unshift方法的特性,比如:它可以一个参数,也可以个多个参数,添加完毕之后,返回添加完后数组的长度

    Array.prototype.myUnshift =  function (...value) {
      for (let i = this.length; i >= 0; i--) {
            this[i] = this[i - value.length];
      }
      for(let j = 0; j < value.length; j++) {
        	this[j] = value;
      }
      return this.length
    }
    arr.myUnshift(4) // [1,2,3,4]
    arr.myUnshift(5,6) // [1,2,3,4,5,6]
    
  • js方法

    arr.unshift(4)
    
删除
删除尾部
  • 通用操作,首先我们需要知道js自带pop方法的特性,比如:它不需要传参数、如果数组为空,则返回undefined,如果有长度,则返回被删除的那个元素。

    Array.prototype.myPop =  function () {
      if(this.length === 0) return undefined
      const value = this[this.length - 1]
      this.length -= 1
      return value
    }
    arr.myPop() // 3
    arr//[1,2]
    
  • js方法

    arr.pop() // 3
    
删除头部
  • 通用操作(下面的代码只应该用作示范,不应该在真实项目中使用),首先我们需要知道js自带shift方法的特性,比如:它不需要传参数、如果数组为空,则返回undefined,如果有长度,则返回被删除的那个元素。

    Array.prototype.myShift =  function () {
      if(this.length === 0) return undefined
      const value = this[0]
      for(let i = 0; i < this.length; i++) {
    		this[i] = this[i+1]
      }
      this.length -= 1
      return value
    }
    arr.myPop() // 1
    arr//[2,3]
    
  • js方法

    arr.shift() // 1