Ramda 的 map()
其 callback 並沒有包含 Index,雖然可使用 addIndex()
將 map()
重新產生新 Function,因為太常使用,已經收錄在 Wink-fp。
Version
macOS Catalina 10.15.6
Wink-fp 1.20.77
addIndex()
import { map, addIndex } from 'ramda'
let data = [
{ title: 'FP in JavaScript', price: 100 },
{ title: 'RxJS in Action', price: 200 },
{ title: 'Speaking JavaScript', price: 300 }
]
let mapi = addIndex(map)
let f = mapi((x, i) => `${i}: ${x.title}`)
f(data) // ?
第 9 行
let mapi = addIndex(map)
let f = mapi((x, i) => `${i}: ${x.title}`)
map()
的 callback 並沒有包含 index,Ramda 正規做法是使用 addIndex()
higher order function 重新將 map()
變成 mapi()
。
mapi()
import { mapi } from 'wink-fp'
let data = [
{ title: 'FP in JavaScript', price: 100 },
{ title: 'RxJS in Action', price: 200 },
{ title: 'Speaking JavaScript', price: 300 }
]
let f = mapi((x, i) => `${i}: ${x.title}`)
f(data) // ?
Wink-fp 已經包含 mapi()
,可直接使用。
mapi()
Functor f => ((a, i) → b) → f a → f b
與map()
功能相同,但多了 index
(a, i) -> b
:callback 包含 index
f a
:data 為 Functor
f b
:回傳新的 Functor
formatN()
import { mapi, formatN } from 'wink-fp'
let data = [
{ title: 'FP in JavaScript', price: 100 },
{ title: 'RxJS in Action', price: 200 },
{ title: 'Speaking JavaScript', price: 300 }
]
let f = mapi(formatN(2)('{1}: {title}'))
f(data) // ?
mapi()
也可搭配前他 function 使其 point-free。
Conclusion
mapi()
補上了map()
常需要 index 功能