【问题标题】:immutablejs & merge with new keyimmutablejs & 与新密钥合并
【发布时间】:2016-02-26 10:13:42
【问题描述】:

我有 2 个地图对象(一个是初始状态,一个来自网络),我需要将初始状态与从网络接收的数据合并。但是,我保留"hideDetails": true 来处理客户端和其他服务器端的状态。

//initial state
var j = Immutable.fromJS({
  "staffs": {
    "hasRecievedData": false,
    "addingNewStaff": false,
    "data": {
      "0": {
        "name" : null,
        "age" : null,
        "designation" : null,
        "email" : null,
        "hideDetails": true
      }
    }
  }
});

// data from network
var m = Immutable.fromJS({
  "staffs" : {
    "0" : {
      "name" : "name1",
      "age" : "23",
      "designation" : "work1",
      "email" : "aliasson@abcd.com"
    },
    "1" : {
      "name" : "name2",
      "age" : "22",
      "designation" : "work2",
      "email" : "aliassson@abcd.com"
    }
  }
});

我想合并这两个并得到如下的新状态,

var m = Immutable.fromJS({
  "staffs" : {
    "hasRecievedData": false,
    "addingNewStaff": false,
    "0" : {
      "name" : "name1",
      "age" : "23",
      "designation" : "work1",
      "email" : "aliasson@abcd.com",
      "hideDetails": true
    },
    "1" : {
      "name" : "name2",
      "age" : "22",
      "designation" : "work2",
      "email" : "aliassson@abcd.com",
      "hideDetails": true
    }
  }
});

如何使用 Merge 函数实现它?

更新1:

不确定这是否正确,但是我得到了结果,

f = j.merge({
  hasRecievedData: true,
  data:  m.get("staffs").map(function(x){
    return x.set("hideDetails",true);
  })
});

【问题讨论】:

    标签: javascript immutable.js


    【解决方案1】:

    来自 ImmutableJS 文档:

    var map1 = Immutable.Map({a:1, b:2, c:3, d:4});
    var map2 = Immutable.Map({c:10, a:20, t:30});
    var obj = {d:100, o:200, g:300};
    var map3 = map1.merge(map2, obj);
    // Map { a: 20, b: 2, c: 10, d: 100, t: 30, o: 200, g: 300 }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 2022-12-16
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 2018-12-04
      相关资源
      最近更新 更多