點燈坊

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

如何取得排序後的第一筆資料 ?

Sam Xiao's Avatar 2020-03-01

通常都是在後端以 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

top000

Conclusion

  • SQL 很常見的需求,若只用 ECMAScript 實現並不容易,但透過 Ramda 只需透過 pipe() 組合 sort()head()prop() 即可

Reference

Ramda, sort()
Ramda, head()
Ramda, prop()