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 的回复的评论中
我认为这不是练习好坏的问题。
据我了解,有两种不同的用例:
- 您设置的值不依赖于之前的值:使用
set
- 您设置的值取决于之前的值:使用
update
所以我认为你不应该总是使用 set
而不是 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 的回复的评论中
我认为这不是练习好坏的问题。
据我了解,有两种不同的用例:
- 您设置的值不依赖于之前的值:使用
set
- 您设置的值取决于之前的值:使用
update
所以我认为你不应该总是使用 set
而不是 update
(或相反),我认为 你应该使用一个或另一个取决于关于您的用例