ECMAScript 會使用 []
根據 Index 取得 String 的 Char,但 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 str = 'abc'
str[1] // ?
str.charAt(1) // ?
標準 ECMAScript 會使用 []
取得指定 index 的 char,也可使用 charAt()
。
nth()
let str = 'abc'
let nth = n => arr => arr[n]
nth(1)(str) // ?
可自行將 []
包成 nth()
。
Ramda
import { nth } from 'ramda'
let str = 'abc'
nth(1)(str) // ?
nth(-1)(str) // ?
Ramda 已經提供 nth()
可直接使用。
nth()
Number → String -> String
根據指定 index 取得 string 的 char
Number
:傳入指定 index
String
:data 為 string
String
:若 char 存在則回傳,否則回傳 empty string
nth()
與[]
不同之處還支援 index 為負數
,-1
及為最後一個 char,-2
為倒數第二 char,以此類推
Application
import { nth, inc, pipe } from 'ramda'
let str = 'abc'
let f = pipe(
inc,
nth
)
f(1)(str) // ?
nth()
有什麼用呢 ? 若我們想將傳入 index 加 1
之後在取得其 char,可直接使用 pipe()
組合 inc()
與 nth()
即可,但若使用 []
則辦不到。
Conclusion
- Operator 看似精簡,但只適用於 imperative,若要真的發揮 FP 威力,就必須將 operator 包裝成 function
nth()
用於 array 則可能回傳undefined
,若用於 string 只會回傳 empty string,不會回傳undefined