zoukankan      html  css  js  c++  java
  • 函数式编程---小记

    高阶函数(HOC)

      js中函数可以被赋值、当作参数进行传递、被其他函数返回,在js中函数就是一等公民。

      高阶函数: 接收函数、返回函数

    // 数组的筛选
    const arr = [1,2,3,4,5]
    
    // 一般实现
    let newArr = []
    for (let i = 0; i < arr.length; i++){
      if (arr[i] > 2) {
         newArr.push(arr[i])
      }
    }
    
    // 使用filter
    arr.filter(item => item> 2)

    函数的柯里化与偏应用

      柯里化: 将多参数的函数转化为可以多次调用的函数

      const curry = function (fn) {
        if (typeof fn !== 'function') {
          throw new Error('参数必须为function')
        }
        return function curryFn (...args) {
          if (args.length < fn.length) {
            return function () {
              return curryFn.apply(null, args.concat([].slice.call(arguments)))
            }
          }
          return fn.apply(null, args)
        }
      }

      偏应用:预先给点参数,调用的时候再传其余的

      const partial = function (fn, ...args) {
        return function (...innerArgs) {
          let index = 0
          for (let i = 0; i < args.length && innerArgs.length; i++) {
            if (args[i] === undefined) {
              args[i] = innerArgs[index++]
            }
          }
          return fn.apply(null, args)
        }
      }

    函数的组合

      多个函数一起按照管道的顺序完成事情。

    // compse函数
      const compose = function (...args) {
        return function (val) {
          return args.reduce.call(args.reverse(), function(cur, fn) {
            return fn(cur)
          }, val)
        }
      }

     

  • 相关阅读:
    [转]SVN服务器搭建和使用(二)
    [转]SVN服务器搭建和使用(一)
    BZOJ 2049 Sdoi2008 Cave 洞穴勘测
    BZOJ 1589 Usaco2008 Dec Trick or Treat on the Farm 采集糖果
    BZOJ 2796 POI2012 Fibonacci Representation
    BZOJ 2115 Wc2011 Xor
    BZOJ 3105 CQOI2013 新Nim游戏
    BZOJ 2460 Beijing2011 元素
    BZOJ 3687 简单题
    BZOJ 1068 SCOI2008 压缩
  • 原文地址:https://www.cnblogs.com/wjyz/p/14667658.html
Copyright © 2011-2022 走看看