函數(shù)式編程:函數(shù)組合compose

  • 通過arr[0]拿到end 簡單的需求復(fù)雜的寫法 探索函數(shù)組合
  var testArr = ['start','middle','end'];
  • 函數(shù)1:定義header 輸入一個數(shù)組 返回?cái)?shù)組的第一個元素
  var header = arr => arr[0];
  • 函數(shù)2: 定義reverse 輸入一個數(shù)組 將數(shù)組中的元素倒轉(zhuǎn)(順便熟悉一下數(shù)組的歸并方法reduce和reduceRight)
  var reverse = function(arr){
     return arr.reduceRight(function(prev,cur){
         return prev.concat([cur])
     },[])
  }
  
  或以下寫法
 
  var reverse = (arr)=>arr.reduceRight((prev,cur)=>prev.concat([cur]),[])

  console.log(reverse(testArr)); //  ["end", "middle", "start"]
  • reduceRight第一個參數(shù):
    回調(diào)函數(shù)(在每一項(xiàng)上調(diào)用的函數(shù))從右往左
    參數(shù)1:前一個值 prev
    參數(shù)2:當(dāng)前值 cur
    參數(shù)3:項(xiàng)的索引 index
    參數(shù)4:數(shù)組對象 array
  • reduceRight第二個參數(shù)(可選)作為歸并基礎(chǔ)的初始值

這個函數(shù)返回的任何值都會作為第一個參數(shù)自動傳給下一項(xiàng)。第一次迭代發(fā)生在數(shù)組的第二項(xiàng)上帚屉,因此第一個參數(shù)是數(shù)組的第一項(xiàng)苹支,第二個參數(shù)是數(shù)組的第二項(xiàng)酬滤。(所以只會執(zhí)行arr.length-1次)。當(dāng)然如果傳第二個參數(shù)作為prev的初始值异剥,那么就會執(zhí)行arr.length次。 此例中傳空數(shù)組[]作為第二個參數(shù),是為了讓prev一開始就是作為一個數(shù)組執(zhí)行concat方法連接數(shù)組逼庞,不然第一個遍歷的"end"調(diào)用concat方法會變成"endmiddle"
reduceRight的返回值就是遍歷完整個數(shù)組并操作之后的最終值

  • 函數(shù)3: compose函數(shù)是一個封裝 返回值也是一個函數(shù) 這個新函數(shù)傳的參將被return的這個匿名函數(shù)接受
  • 所以這里需要用到reduce(跟reduceRight一樣 只不過是從左往右) 函數(shù)的第二個參數(shù) 將這個需要處理的參數(shù)傳進(jìn)來作為初始值 交給...fns中的函數(shù)去處理

相當(dāng)于把a(bǔ)rr交給reverse函數(shù)處理 然后返回值再交給header函數(shù)處理

  var compose = function(...fns){
      return function(arr){
          return fns.reduce(function(val,fn){
              return fn(val)
          },arr)
      }
  }
  
  或以下寫法

  var compose = (...fns)=>(arr)=>fns.reduce((val,fn)=>fn(val),arr)
  
  var last = compose(reverse,header)
  console.log(last(testArr)); // 'end'
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瞻赶,隨后出現(xiàn)的幾起案子赛糟,更是在濱河造成了極大的恐慌派任,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件璧南,死亡現(xiàn)場離奇詭異掌逛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)司倚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門豆混,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人动知,你說我怎么就攤上這事皿伺。” “怎么了盒粮?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵鸵鸥,是天一觀的道長。 經(jīng)常有香客問我丹皱,道長妒穴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任摊崭,我火速辦了婚禮讼油,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘呢簸。我一直安慰自己矮台,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布根时。 她就那樣靜靜地躺著嘿架,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啸箫。 梳的紋絲不亂的頭發(fā)上耸彪,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音忘苛,去河邊找鬼蝉娜。 笑死,一個胖子當(dāng)著我的面吹牛扎唾,可吹牛的內(nèi)容都是我干的召川。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼胸遇,長吁一口氣:“原來是場噩夢啊……” “哼荧呐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤倍阐,失蹤者是張志新(化名)和其女友劉穎概疆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體峰搪,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡岔冀,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了概耻。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片使套。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鞠柄,靈堂內(nèi)的尸體忽然破棺而出侦高,到底是詐尸還是另有隱情,我是刑警寧澤厌杜,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布矫膨,位于F島的核電站,受9級特大地震影響期奔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜危尿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一呐萌、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谊娇,春花似錦肺孤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至法褥,卻和暖如春茫叭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背半等。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工揍愁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人杀饵。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓莽囤,卻偏偏與公主長得像,于是被迫代替她去往敵國和親切距。 傳聞我的和親對象是個殘疾皇子朽缎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359