专栏首页BFE.dev前端刷题日记BFE.dev前端刷题11 - 什么是composition?实现一个pipe()方法
原创

BFE.dev前端刷题11 - 什么是composition?实现一个pipe()方法

bfe.dev 是一个针对前端的刷题网站,像是前端的LeetCode。该系列文章是我在上面的刷题日记。

题目11

BFE.dev#11 什么是Composition?实现pipe()

分析

这是目标。

/**
 * @param { Array<(arg: any) => any> } funcs 
 * @returns { (arg: any) => any }
 */
function pipe(funcs) {
  // your code here
}

我们需要把参数的function合并为一个,显然我们需要closure。

开始代码

根据上述要求,我们先返回一个接受一个参数的空function

function pipe(funcs) {
  return function(arg) {
    // TODO: 通过funcs和arg计算最终结果
  }
}

在计算结果的时候,funcs中的function都需要被调用并且修改同一个变量,我们声明一个result,然后一个for loop就可以搞定。

function pipe(funcs) {
  return function(arg) {
     let result = arg
     for (let func of funcs) {
       result = func.call(this, result)
     }
     return result
  }
}

注意没有用arrow function,以保留正确的this。

这个题目其实很简单。

用reduce

当发现了result和一个for循环的时候,很自然想到用reduce

这个并不会对本质产生变化,只是一种更酷简洁的写法而已。我们试试。

function pipe(funcs) {
  return function(arg) {
     return funcs.reduce((result, func) => {
       return func.call(this, result)
     }, arg)
  }
}

通过,撒花!

这个题目很简单,有兴趣可以去 https://bfe.dev 自己试试。

希望能帮助到你,下次见!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 年收200万+的Facebook前端工程师(E5)都要求些啥能力?

    www.levels.fyi 上可以看到硅谷公司的收入统计,比如Facebook E5的平均收入为37万刀,人民币250万左右。

    JSer
  • BFE.dev前端刷题 23. 实现一个sum()方法

    首先完成function的部分。上述的1和2告诉我们需要用一个变量来存储当前的和,这个“和”需要可以在返回的function中可以使用。为了简单,可以直接当作第...

    JSer
  • BFE.dev前端刷题2 - 实现curry() 并支持placeholder

    实现curry() 并支持placeholder. implement curry() with placeholder support

    JSer
  • 国际标准刊号(ISSN)

    我已经做过了国际标准书号(ISBN)的笔记,下面是国际标准刊号(ISSN)的笔记。 国际标准刊号(International Standard Serial N...

    ruanyf
  • mysql 查看与修改字符集?

    咻一咻
  • 微信支付之扫码、APP、小程序支付接入详解

    做电商平台的小伙伴都知道,支付服务是必不可少的一部分,今天我们开始就说说支付服务的接入及实现。目前在国内,几乎90%中小公司的支付系统都离不开微信支付和支付宝支...

    JAVA葵花宝典
  • 2021你集五福了吗?背后的Web3D引擎Oasis Engine正式开源!

    相信大家已经体验了今年支付宝五福的活动,无论是今年的五福首页还是打年兽游戏都是由蚂蚁互动图形引擎(代号:Oasis Engine)驱动的。

    Java程序猿
  • 微信支付之扫码、APP、小程序支付接入详解

    做电商平台的小伙伴都知道,支付服务是必不可少的一部分,今天我们开始就说说支付服务的接入及实现。目前在国内,几乎90%中小公司的支付系统都离不开微信支付和支付宝支...

    攻城狮的那点事
  • Sensory TrulyHandsFree - 赋能GoPro Hero运动相机离线语音交互

    Sensory TrulyHandsFree离线语音技术,为GoPro Hero系列运动相机的带来革命性的离线语音交互。解放双手,运动自然。

    用户6026865
  • 行人重识别 Person Re-identification知识资料全集

    【导读】主题荟萃知识是专知的核心功能之一,为用户提供AI领域系统性的知识学习服务。主题荟萃为用户提供全网关于该主题的精华(Awesome)知识资料收录整理,使得...

    企鹅号小编

扫码关注云+社区

领取腾讯云代金券