通常都是在後端以 SQL 或 ORM 取得排序後第一筆資料,若要在前端實現呢 ?
Version
macOS Catalina 10.15.3
VS Code 1.42.1
Quokka 1.0.280
Ramda 0.27.0
Ramda
import { pipe, sort, head, prop } from 'ramda'
let data = [
{ title: 'FP in JavaScript', price: 100 },
{ title: 'RxJS in Action', price: 200 },
{ title: 'Speaking JavaScript', price: 300 }
]
let f = pipe(
sort((x, y) => y.price - x.price),
head,
prop('title')
)
f(data) // ?
第 1 行
let data = [
{ title: 'FP in JavaScript', price: 100 },
{ title: 'RxJS in Action', price: 200 },
{ title: 'Speaking JavaScript', price: 300 }
]
我們想取得最貴的一本書的 title
。
第 9 行
let f = pipe(
sort((x, y) => y.price - x.price),
head,
prop('title')
)
在 SQL 可以很容易使用 SELECT TOP 1 ... ORDER BY price DESC
。
在 Ramda 可依以下步驟實現:
- 使用
sort()
實現ORDER BY price DESC
- 使用
head()
實現SELECT TOP 1
- 使用
prop()
取得title
Conclusion
- SQL 很常見的需求,若只用 ECMAScript 實現並不容易,但透過 Ramda 只需透過
pipe()
組合sort()
、head()
與prop()
即可