zoukankan      html  css  js  c++  java
  • 使用高阶函数实现Array对象的方法

     

    Array 原型上有很多数组的方法。例如 map, every, some,filter,forEach等,今天我们就使用高阶函数来mock以上的功能。 以上方法怎么使用,就不再举例说明了,大家应该都用的滚瓜烂熟了。常用的使用模式都是这样的。

    [1,2,3,4,5].forEach((item, index) => {
         console.log(item)
    })
    

    那么什么是高阶函数呢?大家都知道,在JS的世界里,函数是一等公民,函数既可以做参数,也可以做函数的返回值,跟普通的变量没有区别。例如:

    function add (fn) {
      return fn
    }
    

    大概解释清楚概念后,我们就使用高阶函数的理念,分别通过原生的JS来实现以上数组的几种方法:

    • forEach
    function forEach (array, fn) {
        for(let i = 0; i< array.length; i++) {
            fn(array[i],i)
        }
    }
    
    forEach([1,2,3,4], (item, i) => {
        console.log(item)
    })
    
    • filter
    function filter(array, fn) {
        let _arr = []
        for(let i = 0; i< array.length; i++) {
             if(fn(array[i],i)) {
                 _arr.push(array[i])
             }
        }
        return _arr
    }
    
    let cc = filter([2,3,4,4,5,5,6,6], (item, i) => {
        return item % 2 === 0
    })
    
    console.log(cc);
    
    • some
    function some (array, fn) {
        let flag = false
        for(let i = 0; i< array.length; i++) {
            if ((fn(array[i],i))) {
                flag = true
                break
            }  
       }
       return flag
    }
    
    let dd = some([1,2,4,4,4,5], (item) => {
        return item > 3
    })
    
    
    • every
    function every(array, fn) {
        let flag = true
        for(let i = 0; i< array.length; i++) {
            if (!(fn(array[i],i))) {
                flag = false
                break
            }  
       }
       return flag
    }
    
    let ff = every([1,2,4,4,4,5], (item) => {
        return item > 0
    })
    
    • map
    function map (array, fn) {
        let _arr = []
        for(let i = 0; i< array.length; i++) { 
            _arr.push(fn(array[i], i))
        }
        return _arr
    }
    
    let ee = [1,2,3,4].map(item => {
        return item * 2
    })
  • 相关阅读:
    /bin,/sbin,/usr/sbin,/usr/bin 目录
    centos开放端口8080
    centos 创建用户组及用户
    oracle内存优化
    ORACLE概要文件
    【刷题】洛谷 P3834 【模板】可持久化线段树 1(主席树)
    【总结】莫比乌斯反演
    【刷题】洛谷 P3768 简单的数学题
    【刷题】BZOJ 4816 [Sdoi2017]数字表格
    【刷题】BZOJ 2693 jzptab
  • 原文地址:https://www.cnblogs.com/ndh074512/p/14949892.html
Copyright © 2011-2022 走看看