2016-02-26 111 views
0

我有2個地圖對象(其中一個是來自網絡的初始狀態&),我需要將初始狀態與從網絡接收的數據合併。但是,我保留"hideDetails": true來處理客戶端和服務器端的狀態。immutablejs&與新密鑰合併

//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" : "[email protected]" 
    }, 
    "1" : { 
     "name" : "name2", 
     "age" : "22", 
     "designation" : "work2", 
     "email" : "[email protected]" 
    } 
    } 
}); 

我要合併這兩個得到了新的狀態,如下,

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

如何使用合併功能,我實現嗎?

UPDATE1:

不知道這是正確與否,但我得到的結果與此,

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

回答

0

從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 }