Immutable.js 地图集与更新

Immutable.js Map set vs update

我想更改我拥有的地图中某个键的值。如果我要求更新的密钥不存在,使用 update 会给我一个错误,除了使用 update 而不是 set 有什么好处(如果有的话)?我发现 set 明显多于 concise/cleaner。事实上,根据文档,人们可以(盲目地)争辩说 set 实际上比 update 更有效,因为 set 不必为 updater函数。

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

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

对比set:

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

这个示例非常简单,但是当您开始围绕数据构建算法时(如 FP),以这种方式对数据应用转换的模式会变得更加普遍,而不是相反.我以前在 game.update('player', moveLeft).

这样的游戏中做过这样的事情

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

@MatthewHerbst 说:

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

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

我认为这不是练习好坏的问题。

据我了解,有两种不同的用例:

  1. 您设置的值不依赖于之前的值:使用set
  2. 您设置的值取决于之前的值:使用update

所以我认为你不应该总是使用 set 而不是 update(或相反),我认为 你应该使用一个或另一个取决于关于您的用例