ECMAScript 使用 [array.length - 1]
取得 Array 最後一個 Element,只可惜這是 Operator 而非 Function,因此無法使用 Function Composition,Ramda 另外提供了 last()
供 FP 使用。
Version
macOS Catalina 10.15.3
VS Code 1.42.0
Quokka 1.0.277
Ramda 0.26.1
Imperative
let data = [1, 2, 3]
let last = arr => arr[arr.length -1]
last(data) // ?
Imperative 會直接使用 []
取得最後一個 element。
ECMAScript
let data = [1, 2, 3]
let last = arr => arr.slice(-1)[0]
last(data) // ?
也可使用 slice(-1)
取得最後一個 element 開始的的 array,再用 [0]
取得。
Functional
import { nth } from 'ramda'
let data = [1, 2, 3]
let last = nth(-1)
last(data) // ?
Functional 可使用 nth()
以 point-free 取得最後一個 element。
Ramda
import { last } from 'ramda'
let data = [1, 2, 3]
last(data) // ?
Ramda 已經提供 last()
可直接使用。
last()
[a] → a | undefined
取得 array 的最後一個 element
import { last } from 'ramda'
let data = []
last(data) // ?
last()
若取不到資料,會回傳 undefined
。
Conclusion
- ECMAScript 必須使用
arr[arr.length -1]
才能取得最後一個 element,但 Ramda 只要nth(-1)
即可 last()
與tail()
有一點不同,若取不到資料,tail()
會環傳[]
empty array,而last()
會回傳undefined
,需小心處理