【问题标题】:Immutable.js Map set vs updateImmutable.js 地图集与更新
【发布时间】:2015-12-23 01:31:55
【问题描述】:

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

【问题讨论】:

    标签: javascript immutable.js


    【解决方案1】:

    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) 相当愚蠢。

    【讨论】:

    • 是的,我知道它的价值,所以想知道使用update 是否仍然是一种好习惯,或者set 是否可以。
    【解决方案2】:

    @MatthewHerbst 说:

    (...) 想知道使用 update 是否仍然是一种好习惯,或者 set 是否可以

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

    我不认为这是一个好坏习惯的问题。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-09
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 2017-01-15
      • 1970-01-01
      相关资源
      最近更新 更多