不可变.js映射集与更新
Immutable.js Map set vs update
我想在我拥有的地图中的键处更改一个值。除了如果我要求更新的密钥不存在,使用 update
会给我一个错误之外,使用 update
比set
有什么好处(如果有的话(?我发现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-马歇尔的回应的评论中
我不认为这是一个好或坏的做法问题。
据我了解,有两种不同的用例:
- 您设置的值不依赖于以前的值:使用
set
- 您设置的值取决于以前的值:使用
update
所以你 我认为你不应该总是使用 set
而不是update
(或者相反(,我认为你应该根据你的用例使用一个或另一个
相关文章:
- 如何在映射数组中添加换行符
- ng映射方向备选方案
- Knockout映射创建/更新出现问题
- 不可变,在映射内更新不返回正确的对象
- 挖空映射:加载数据后,父模型中的计算可观察量不会更新
- 如何在不使用映射的情况下更新视图模型
- 使用不可变 JS 更新映射列表中的一个键
- ASP.net MVC/Knockout JS 映射 - 无法更新视图模型
- 不可变.js映射集与更新
- KnockoutJS:使用映射将数据更新/插入到viewModel
- knockout.mapping.js,是否可以只更新映射变量的一部分
- 通过更新的lat&谷歌的lng将可拖动标记映射到另一个页面
- 推迟或暂停敲除中的依赖项评估,直到视图模型完全更新(例如使用映射插件)
- KnockoutJS绑定不使用映射插件进行更新
- 挖空映射插件[创建,更新]:对象已创建,无法更新
- 我如何在Knockout中更新映射的内部数组而不更新主数组中的数组对象的数量
- Knockout.js:更新用映射插件加载的对象
- 扩展AngularJS $resource来映射Rails rest式路由(特别是$save来创建和更新)
- 不可变js-创建或更新嵌套在映射中的列表
- 敲除映射>映射的数组总是更新的