不可变.js映射集与更新

Immutable.js Map set vs update

本文关键字:更新 映射 js 不可变      更新时间:2023-09-26

我想在我拥有的地图中的键处更改一个值。除了如果我要求更新的密钥不存在,使用 update 会给我一个错误之外,使用 updateset有什么好处(如果有的话(?我发现set更加简洁/干净。事实上,根据文档,人们可以(盲目地(争辩说set实际上比update更有效,因为set不必执行updater函数的get

当新值是当前值转换的结果时,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说:

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

在他对@andrew-马歇尔的回应的评论中

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

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

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

所以你 我认为你不应该总是使用 set 而不是update(或者相反(,我认为你应该根据你的用例使用一个或另一个