ECMAScript 會使用 []
根據 Index 取得 Array 的 Element,但 Operator 對於 Function Composition 並不方便,Ramda 另外提供了 nth()
取代之。
Version
macOS Catalina 10.15.4
VS Code 1.43.2
Quokka 1.0.284
Ramda 0.27.0
[] Operator
let data = [1, 2, 3]
data[1] // ?
標準 ECMAScript 會使用 []
取得指定 index 的 element。
nth()
let data = [1, 2, 3]
let nth = n => arr => arr[n]
nth(1)(data) // ?
可自行將 []
包成 nth()
。
Ramda
import { nth } from 'ramda'
let data = [1, 2, 3]
nth(1)(data) // ?
nth(-1)(data) // ?
Ramda 已經提供 nth()
可直接使用。
nth()
Number → [a] → a | Undefined
根據指定 index 取得 array 的 element
Number
:傳入指定 index
[a]
:data 為 array
a | Undefined
:若 element 存在則回傳,否則回傳 undefined
nth()
與[]
不同之處還支援 index 為負數
,-1
及為最後一個 element,-2
為倒數第二 element,以此類推
Application
import { nth, inc, pipe } from 'ramda'
let data = [1, 2, 3]
let f = pipe(
inc,
nth
)
f(1)(data) // ?
nth()
有什麼用呢 ? 若我們想將傳入 index 加 1
之後在取得其 element,可直接使用 pipe()
組合 inc()
與 nth()
即可,但若使用 []
則辦不到。
Conclusion
- Operator 看似精簡,但只適用於 imperative,若要真的發揮 FP 威力,就必須將 operator 包裝成 function
nth()
為少數會回傳undefined
的 function,需小心使用,必要時可搭配either()
提供undefined
的預設值避免 runtime error