點燈坊

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

使用 adjust 改變 Array 中指定 Index 值

Sam Xiao's Avatar 2020-12-30

若要改變 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

adjust002

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 打八折。

adjust002

Conclusion

  • adjustupdate 很類似,唯 adjust 傳入 function,而 update 傳入 value
  • adjust 在實務上看似少用,但若搭配 Array Pair 則非常實用,可搭配 map 改變 Pair

Reference

Ramda, adjust()
Kyle Tilman, Ramda – R.adjust()