• 如何手动实现filter


    思路

    filter 方法接收两个参数:

    • 对每一项执行的函数
      • 该函数接收三个参数:
        • 数组项的值
          数组项的下标
          数组对象本身
    • 指定 this 的作用域对象

    filter 方法返回 执行结果为true的项组成的数组。

    代码表示:

    arr.filter(function(item, index, arr){}, context)

    实现

    由此,实现 fakeFilter 方法如下

    Array.prototype.fakeFilter = function fakeFilter(fn, context) {
      if (typeof fn !== "function") {
        throw new TypeError(`${fn} is not a function`);
      }
      
      let arr = this;
      let temp = [];
    
      for (let i = 0; i < arr.length; i++) {
        let result = fn.call(context, arr[i], i, arr);
        if (result) temp.push(arr[i]);
      }
      return temp;
    };

    检测

    let arr = ["x", "y", "z", 1, 2, 3];
    
    console.log(arr.filter((item, index, arr) => console.log(item, index, arr)));

    输出

    x 0 [ ‘x’, ‘y’, ‘z’, 1, 2, 3 ]
    y 1 [ ‘x’, ‘y’, ‘z’, 1, 2, 3 ]
    z 2 [ ‘x’, ‘y’, ‘z’, 1, 2, 3 ]
    1 3 [ ‘x’, ‘y’, ‘z’, 1, 2, 3 ]
    2 4 [ ‘x’, ‘y’, ‘z’, 1, 2, 3 ]
    3 5 [ ‘x’, ‘y’, ‘z’, 1, 2, 3 ]
    []
  • 相关阅读:
    Nginx安装配置
    HTTPS原理(三次握手)
    Linux常用指令
    MVC思想
    MySQL简介
    PHP面向对象(二)
    PHP面向对象(一)
    php循环用法
    如何删掉git版本库master分支的第一个commit
    韦东山嵌入式Linux学习笔记08--中断体系结构
  • 原文地址:https://www.cnblogs.com/art-poet/p/12522559.html
Copyright © 2020-2023  润新知