admin管理员组

文章数量:1201590

I would like to change a value at a key in a Map I have. Other than the fact that using update will give me an error if the key I ask to update doesn't exist, what benefit is there (if any) to using update over set? I find set to be significantly more concise/cleaner. In fact, based on the documentation one could (blindly) argue that set is actually more efficient than update since set doesn't have to perform the get for the updater function.

I would like to change a value at a key in a Map I have. Other than the fact that using update will give me an error if the key I ask to update doesn't exist, what benefit is there (if any) to using update over set? I find set to be significantly more concise/cleaner. In fact, based on the documentation one could (blindly) argue that set is actually more efficient than update since set doesn't have to perform the get for the updater function.

Share Improve this question edited Jan 19, 2017 at 13:23 Andrew Marshall 96.9k20 gold badges227 silver badges217 bronze badges asked Dec 23, 2015 at 1:31 Matthew HerbstMatthew Herbst 32k25 gold badges90 silver badges136 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 18

update is more powerful when your new value is the result of a transform of the current value:

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})

vs. with set:

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

This example is pretty trivial, but the pattern of applying transforms to your data in this way becomes more common when you start building your algorithms around your data (as in FP) instead of the other way around. I’ve done things before in a game like game.update('player', moveLeft).

If you know what the new value is, though, then just use set as update(key, x => val) is rather silly.

@MatthewHerbst said:

(...) was wondering if it was still good practice to use update or if set was fine

in his comment on @andrew-marshall's response

I don't think it is a question of good or bad practice.

From what i understand there are two different use cases:

  1. the value you set does NOT depend on the previous value : use set
  2. the value you set depends on the previous value: use update

So you I don't think you should always use set over update (or the other way around), I think you should use one or the other depending on your use case

本文标签: javascriptImmutablejs Map set vs updateStack Overflow