首页 > 其他分享 >1_js中过滤器filter简单实现

1_js中过滤器filter简单实现

时间:2022-10-29 16:45:27浏览次数:68  
标签:currentValue myFilter 函数 percolator js filter 匿名 数组 过滤器

filter API自实现

我感觉这个API我用起来不是很顺畅

我自己写一个看看

分析

这是api参考手册

image-20221029141019405

image-20221029141029949

设计思路

  1. 抛开其他的不谈,filter 本质上就是 原型Array上的一个函数 == api

  2. 这个api的结构是这样的

    • // 这个percolator是一个匿名函数
      function filter(percolator){
          
      }
      
  3. 那么重点就在这个percolator 身上,它是一个参数,是一个匿名函数

  4. 这个匿名函数有三个参数,对应的就是文档上的三个参数

    1. currentValue:这是数组当中的每一项
      • 这个项是怎么来的 ==> 通过循环得到的
    2. index:这是currentValue这个元素,它在数组当中的索引
    3. arr:currentValue所处的数组
  5. 把这个搞清楚了,剩下的就很简单了

开始设计

  1. 首先我们需要在原型对象Array当中,通过prototype 设计一个供 所有数组类型,调用的函数

    • Array.prototype.myFilter = function(percolator){}
      
  2. 既然这个 方法,最终会得到一个新的数组,不会改变原有数组结构,那我们肯定要先设计一个新数组嘛

    • Array.prototype.myFilter = function(percolator){
          // 设计一个新数组
      	let newArr = [];
      }
      
  3. 我们需要得到 currentValue(循环项),这个东西到底如何上手?通过循环得到嘛

    1. 通过刚刚在原形对象上设计的 myFilter 函数,我们可以对这个数组进行基本的迭代

    2. Array.prototype.myFilter = function(percolator){
          // 设计一个新数组
          let newArr = [];
          // 对当前数组进行迭代;this的指向是数组本身
          for(let i =0; i<this.length; i++){
              // this[i] 就代表我们当前的循环项,也就是currentValue
          }
      }
      
    3. this[i] 就代表我们当前的循环项,也就是currentValue

  4. 那么现在,值得思考的地方就来了

    1. 我们使用这个for循环,是为了得到循环项,那么这个循环项给谁调用? == 匿名函数percolator
    2. 这个匿名函数,可以接受三个参数,但是currentValue是必须要的,所以这里我们三个参数都传进去
    3. 那么,匿名函数应该用在什么位置?
      • 我觉得这里应该写个判断,当满足条件的时候,给newArr添加一个元素
    4. 它需要做什么事情?
      • 这个判断,就是匿名函数要做的事情,但是判断不能写死,要让使用者来书写

完整实现

所以现在结果很明确,我们需要写个if判断,当if为true,执行if当中的语句,控制是否为true,交给匿名函数 == percolator 来搞定

  • Array.prototype.myFilter = function(percolator){
        // 设计一个新数组
        let newArr = [];
        // 对当前数组进行迭代;this的指向是数组本身
        for(let i =0; i<this.length; i++){
            // this[i] 就代表我们当前的循环项,也就是currentValue
            if(percolator(this[i],i,this)){ // 当前元素,当前索引,对应数组
               // 满足条件,给 newArr添加一个元素
               newArr.push(this[i]);
            }
        }
        // 循环结束,返回新的数组
        return newArr;
    }
    

测试

这里有一个简单结构的数组

image-20221029143135767

现在我们调用api,myFilter,打印输出

image-20221029143251144

10-29-3

标签:currentValue,myFilter,函数,percolator,js,filter,匿名,数组,过滤器
From: https://www.cnblogs.com/wavesbright/p/16839022.html

相关文章

  • 【Node.JS 练习】时钟案例
    目录​​案例要求​​​​实现​​​​步骤​​​​创建正则表达式​​​​使用相关模块,读取需要被处理的html文件​​​​自定义resolve方法​​​​css​​​​ js​​......
  • 【Node.JS 】http的概念及作用
    什么是http模块在网络节点中,负责消费资源的电脑,叫做客户端,负责对外提供网络资源的电脑,叫做服务器。http模块是Node.js官方提供的,用来创建web服务器的模块,通过http模块提供的......
  • 【Node.JS 练习】考试成绩整理
     目标整理前的数据格式  整理后的数据格式 实现思路导入需要的fs文件系统模块使用fs.readFile()方法,读取素材目录下的成绩.txt文件。判断文件是否读取失败。文件读取成功......
  • 【Node.JS】buffer类缓冲区
    目录​​简介​​​​创建Buffer类​​​​使用Buffer类​​​​例 ​​​​直接使用buffer类​​简介node.js的开发语言就是js,javascript语言自身只有字符串数据类型,没有......
  • 【Node.JS】事件的绑定与触发
    目录​​简介​​​​绑定事件​​​​on()​​​​addListener()​​​​ once()​​​​监听事件emit()​​​​ 传参​​​​ 删除事件​​​​removeListener()​​​​ remov......
  • 【Node.JS】写入文件内容
    fs.writeFile()语法格式fs.writeFile(filepath,data[,options],callback)参数一:必选参数,为被写入文件的路径,字符串格式参数二:必选参数,表示写入的内容。参数三:可选参数,表示以什......
  • js-基础排序实现(冒泡排序,快速排序,选择排序,插入排序,希尔排序,归并排序,堆排序)
    冒泡排序:两个指针循环,遇到不合适就交换,直到将符合要求的浮到边界functionbubbleSort(list){ for(leti=0;i<list.length;i++){ for(letj=0;j<list.length-i-1;j++)......
  • 【JS ES6】use strict 严格模式
    目录​​什么是严格模式​​​​启用严格模式​​​​严格模式中的变化​​由于JavaScript语法不够严谨,一直被人们所诟病,例如在使用一个变量时,可以不使用var关键字来提......
  • [JS ES6]传值和传址
     目录​​传值​​​​什么是传值​​​​ 例 ​​​​传址​​​​什么是传址​​​​例 ​​传值什么是传值leta=1;letb=a;console.log(a,b);//11 传值是......
  • js-合法URL
    常用正则符号. 查找单个字符,除了换行和行结束符\w 查找单词字符\W 查找非单词字符\d 查找数字\D 查找非数字字符\s 查找空白字符\S 查找非空白字符\b 匹配单词边......