點燈坊

失くすものさえない今が強くなるチャンスよ

使用 Recursion 實現 filter()

Sam Xiao's Avatar 2020-03-30

Recursion 為 FP 中重要的一支,亦可使用其實現 filter()

Version

macOS Catalina 10.15.3
VS Code 1.42.1
Quokka 1.0.277
ECMAScript 2015

filter()

import { isOdd } from 'wink-fp'

let data = [1, 2, 3]

let filter = f => ([h, ...t]) => !h ? [] : 
  f(h) ? [h, ...filter(f)(t)] : [...filter(f)(t)]

filter(isOdd)(data) // ?  

Resursion 會將 array 拆分成 head 與 tail,若 head 為 undefined 時為初始值 [],若 f(h)true 則會包含 h,否則剩下的 tail 將 recursive 呼叫本身的 map() 並使用 ... array spread 展開。

filter000

Conclusion

  • 將 array 拆成 head 與 tail 為 recursion 慣用 pattern,然後 tail 會不斷呼叫自己 recursive 解決問題