js封装数组方法(注意:不是函数)

对于函数都会封装,但是让你封装一个方法怎么办?

首先要知道函数的概念:

  1. 函数也是一个对象
  2. 函数中可以封装一些功能,在需要的使用可以执行这些功能
  3. 函数中也可以保存一些代码在需要的时候调用
  4. 使用typeof检查一个函数对象时,返回是function

那么带大家手敲一个forEach的方法:

Array.prototype.myForEach =  function (func) {
      let len = this.length;
      let _this = arguments[1] || window;
      for(let i =0;i<len;i++) {
        func.call(_this, this[i],i, this)
      }
}

调用时:

arr.myForEach((item,index)=> {
   console.log(item,index) 
})

封装方法时首先应该对prototype有一定了解,然后再Array数组中加入myForEach的方法,外面直接调用就可以了
其次说一些myForEach的结构,其中this就是指向的当前数组也就是arr,this[i]也就相当于arr[i],如果对call有了解的应该知道他主要是改变this指向的

使你最后打印的可以打印出添加的内容item对应就是this[i],index对应i,可以消化一下,消化完就要封装一下filter了

filter的方法:

复制代码
Array.prototype.myFilter =  function (func) {
      let len = this.length;
      let arr = [];
      let _this = arguments[1] || window;
      for(let i =0;i<len;i++) {
        func.call(_this, this[i],i, this) && arr.push(this[i])
      }
      return arr;
    }
复制代码

调用时:

let arr = [1,4,7,1,5,8,9,3,2,5.4,2,3,2,1]
    let newArr = arr.myFilter((item,index,arr) => {
      return item > 2
    })

filer比forEach唯一的区别在于有return,其实都差不多因为要返回数据arr本身数据不会变所以  func.call(_this, this[i],i, this)和myForEach是一样的就是最后返回的 item>2是不一样的,我们要满足item>2的需求,所以func并上arr.push(this[i])就可以返回大于2的数据

如果还是不理解,下面时sort的方法,亲自带进去试一试,获取有不一样的发现,代码如下:

复制代码
    Array.prototype.mySort = function (func) {
      let len = this.length;
      let arr = [...this]
      let _this = arguments[1] || window; for(let i=0;i<len-1;i++) {
        for(let j=0;j<len-i-1;j++) {
          if(func(arr[j],arr[j+1])>0) {
            [arr[j],arr[j+1]] = [arr[j+1],arr[j]]
          }
        }
      }
      
      return arr
    }
复制代码

调用:

let newArr2 = arr.mySort(
      (a,b)=> {
        return b-a
      }
    )

 

posted @   黑白棋学弟  阅读(129)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示