2015-12-23 17 views
6

私が持っているマップのキーの値を変更したいと思います。実際にはupdateを使用すると、私が更新を求めているキーが存在しない場合はエラーが表示されますが、setを超えてupdateを使用すると(あれば)何のメリットがありますか?私はsetがより簡潔/クリーナーであることが分かります。実際には、文書に基づいて、setは、がupdater機能のためにgetを実行する必要がないので、実際にupdateよりも効率的であると主張することができます(盲目的に)。Immutable.js地図セット対更新

答えて

15

updateは、あなたの新しい値が現在の値の変換の結果である場合に、より強力です:set

const inc = (x) => (x + 1) 
const m = Immutable.Map({a: 1, b: 2, c: 3}) 
m.update('b', inc) #=> {a: 1, b: 3, c: 3}) 

対:

m.set('b', inc(m.get('b')) 

この例は非常に簡単ですが、この方法でデータに変換を適用するパターンは、逆の代わりに(FPのように)データの周りにアルゴリズムを構築し始めるとより一般的になります。私はgame.update('player', moveLeft)のようなゲームの中で前にやったことがあります。

あなたは、新しい値が何であるかを知って場合は、しかし、その後、ちょうどupdate(key, x => val)としてsetを使用することはかなり愚かです。

+0

に応じて、どちらか一方を使用する必要がありますええ、私は値を知っているので、まだ 'update'かを使用することをお勧めした場合は思っていたと思いますもし 'set'がうまくいけば。 –

0

@MatthewHerbstは言った:それはアップデートを使用するにはまだ良い練習だった場合、または

(...)思っていたセットは、@アンドリュー・マーシャルの応答の彼のコメントで

を罰金だった場合

私はそれが良いか悪い習慣の問題ではないと思います。

私は2つの異なる使用例があります理解して何から:あなたはを設定

  1. 値が以前の値にを依存していない:set
  2. を使用し、あなたがを設定した値は、前のに依存値:use update

をより常に使用する必要はありません(またはその逆)、私ははあなたのユースケース

関連する問題