點燈坊

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

使用 last() 取得 String 最後一個 Char

Sam Xiao's Avatar 2020-02-16

ECMAScript 使用 [string.length - 1] 取得 String 最後一個 Char,只可惜這是 Operator 而非 Function,因此無法使用 Function Composition,Ramda 另外提供了 last() 供 FP 使用。

Version

macOS Catalina 10.15.3
VS Code 1.42.1
Quokka 1.0.277
Ramda 0.27.0

Imperative

let data = 'abc'

let last = str => str[str.length - 1]

last(data) // ?

Imperative 會直接使用 [] 取得最後一個 char。

last000

ECMAScript

let data = 'abc'

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

last(data) // ?

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

last001

Functional

import { nth } from 'ramda'

let data = 'abc'

let last = nth(-1)

last(data) // ?

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

last002

Ramda

import { last } from 'ramda'

let data = 'abc'

last(data) // ?

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

last()
String -> String
取得 string 的最後一個 char

last003

import { last } from 'ramda'

let data = ''

last(data) // ?

last() 若取不到資料,會回傳 empty string 而不是 undefined

last004

Conclusion

  • ECMAScript 必須使用 str[str.length -1] 才能取得最後一個 char,但 Ramda 只要 nth(-1) 即可
  • 若找不到資料,last() 用在 array 會回傳 undefined;用在 string 只會回傳 empty string

Reference

Ramda, last()