【问题标题】:immutable js update a key in Map不可变的 js 更新 Map 中的键
【发布时间】:2016-06-23 08:49:47
【问题描述】:

所以我有一个不可变的 js 映射:

{
 title: "item 1",
 title2: "item 2",
 title3: "item 3"
}

我要更新密钥,所以会变成:

{
  new title: "item 1",
  title2: "item 2",
  title3: "item 3"
}

到目前为止update()set() 我只能更新值吗?是否可以更新密钥,还是需要先转换才能更新密钥?

【问题讨论】:

    标签: javascript immutable.js


    【解决方案1】:

    您可以将mapKeys 用作:

    var map = Immutable.Map({
      new title: "item 1",
      title2: "item 2",
      title3: "item 3"
    });
    
    map = map.mapKeys(k => {
      if (k === "title1") 
        return "newTitle";
      return k;
    });
    

    【讨论】:

    • 完美!很有魅力
    【解决方案2】:

    另一种更直接的方法是使用delete

    var map = Immutable.Map({
      title: "item 1",
      title2: "item 2",
      title3: "item 3"
    });
    
    map = map.set('new title', "item 1")
        .delete('title');
    

    map = map.set('new title', map.get('title'))
        .delete('title');
    

    【讨论】:

    • 这个答案可能更快,它不必遍历地图中的每个键。参见例如jsperf.com/immutable-map-change-key/1.
    • 更多细节:Map.mapKeys 不能偷懒,因为 get 需要遍历原始映射中的 每个 键。
    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2021-09-18
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多