點燈坊

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

使用 last() 取得 Array 最後一個 Element

Sam Xiao's Avatar 2020-02-14

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。

last000

ECMAScript

let data = [1, 2, 3]

let last = arr => arr.slice(-1)[0]

last(data) // ?

也可使用 slice(-1) 取得最後一個 element 開始的的 array,再用 [0] 取得。

last001

Functional

import { nth } from 'ramda'

let data = [1, 2, 3]

let last = nth(-1)

last(data) // ?

Functional 可使用 nth() 以 point-free 取得最後一個 element。

last002

Ramda

import { last } from 'ramda'

let data = [1, 2, 3]

last(data) // ?

Ramda 已經提供 last() 可直接使用。

last()
[a] → a | undefined
取得 array 的最後一個 element

last003

import { last } from 'ramda'

let data = []

last(data) // ?

last() 若取不到資料,會回傳 undefined

last004

Conclusion

  • ECMAScript 必須使用 arr[arr.length -1] 才能取得最後一個 element,但 Ramda 只要 nth(-1) 即可
  • last()tail() 有一點不同,若取不到資料,tail() 會環傳 [] empty array,而 last()會回傳 undefined,需小心處理

Reference

Ramda, last()