點燈坊

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

使用 plucks() 從 Object Functor 取出多個 Property

Sam Xiao's Avatar 2020-11-20

pluck() 可從 Object Functor 取出單一 Property,若要取出多個 Property,則要使用 plucks()

Version

Wink-fp 1.24.9

Function Pipeline

import { pipe, map, props } from 'ramda'

let data = [
  { id: 0, title: 'FP in JavaScript', price: 100, },
  { id: 1, title: 'RxJS in Action', price: 200, },
  { id: 2, title: 'RxJS in Action', price: 300, },
]

let plucks = ps => pipe(
  map(props(ps))
)

plucks(['title', 'price'])(data) // ?

若想從 Object Functor 中取出多個 property,可從 plucks() 傳入 Property Array,由 map()props() 取得。

plucks002

Point-free

import { pipe, map, props } from 'ramda'

let data = [
  { id: 0, title: 'FP in JavaScript', price: 100, },
  { id: 1, title: 'RxJS in Action', price: 200, },
  { id: 2, title: 'RxJS in Action', price: 300, },
]

let plucks = pipe(props, map)

plucks(['title', 'price'])(data) // ?

可直接使用 pipe() 直接將 props()map() 組合。

plucks001

Wink-fp

import { plucks } from 'wink-fp'

let data = [
  { id: 0, title: 'FP in JavaScript', price: 100, },
  { id: 1, title: 'RxJS in Action', price: 200, },
  { id: 2, title: 'RxJS in Action', price: 300, },
]

plucks(['title', 'price'], data) // ?

Wink-fp 已經內建 plucks() 可直接使用。

plucks()
Functor f => [k] → f {k: v} → f [v]

[k]:傳入 Property Array

f {k: v}:data 為 Object Functor

f [v]:回傳 Array Functor

plucks000

Conclusion

  • plucks() 取名靈感來自於 pluck()pluck() 可取得 Object Functor 單一 property,plucks() 則可取得多個 property