Immutable.js Map set vs update

时间:2015-12-23 01:31:55

标签: javascript immutable.js

我想在我拥有的地图中更改某个键的值。除了使用update的情况下,如果我要求更新的密钥不存在,我会发现错误,使用update而不是set会有什么好处(如果有的话)?我发现set更加简洁/清晰。事实上,基于文档,人们可以(盲目地)认为set实际上比update更有效,因为set不必为get执行updater {1}}功能。

2 个答案:

答案 0 :(得分:15)

当您的新值是当前值转换的结果时,

update会更强大:

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。与set

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

这个例子非常简单,但是当您开始围绕数据构建算法时(例如FP)而不是相反的方式,以这种方式应用变换到您的数据的模式变得更加常见。我之前在像game.update('player', moveLeft)这样的游戏中做过一些事情。

如果您知道新值是什么,那么只需使用set update(key, x => val)就相当愚蠢。

答案 1 :(得分:1)

@MatthewHerbst说:

  

(...)想知道使用更新是否仍然是好的做法,或者设置是否正常

在他对@ andrew-marshall的回应的评论中

我不认为这是一个好的或坏的做法的问题。

据我所知,有两种不同的用例:

  1. 您设置的值不依赖以前的值:使用set
  2. 您设置的值取决于以前的值:使用update
  3. 所以你不认为你应该总是使用set而不是update(或者相反),我认为你应该使用其中一种,具体取决于你的用例