若要改變 Array 中指定 Index 值,可使用 adjust
自行傳入 Index 與 Function 改變之。
Version
Ramda 0.27.1
adjust
import { adjust, inc } from 'ramda'
let data = [1, 2, 3]
adjust (1) (inc) (data) // ?
若想指定 Array 的 index 直接修改其 element,Ramda 提供 adjust
可直接使用。
adjust :: Number → (a → a) → [a] → [a]
提供 function 改變 Array 中指定 index 值
Number
:指定 index 值
(a -> a)
:改變 index 的 function
[a]
:data 為 Array
[a]
:回傳新 Array
Array Pair
import { map, multiply, adjust } from 'ramda'
let data = [
['FP in JavaScript', 100],
['Elm in Action', 200],
['Speaking JavaScript', 300]
]
map (adjust (1) (multiply (0.8))) (data) // ?
ECMAScript 雖然沒有 Pair,但實務上常用 Array 模擬 Pair,如 Ramda 的 pair
就是回傳只有兩個 element 的 Array。
第 3 行
let data = [
['FP in JavaScript', 100],
['Elm in Action', 200],
['Speaking JavaScript', 300]
]
data
為 Pair Array,我們希望對 price 打八折。
第 9 行
map (adjust (1) (multiply (0.8))) (data)
由於 Pair 本質為 Array,而 price 只是 index 1,剛好可使用 multiply (0.8)
直接對 adjust (1)
對 price 打八折。
Conclusion
adjust
與update
很類似,唯adjust
傳入 function,而update
傳入 valueadjust
在實務上看似少用,但若搭配 Array Pair 則非常實用,可搭配map
改變 Pair