2016-02-26 2 views
0

У меня есть два объекта карты (одно из них - начальное состояние & один из сети), и мне нужно объединить начальное состояние с данными, полученными из сети. Тем не менее, я держу "hideDetails": true, чтобы обрабатывать состояние на стороне клиента, а другие - с сервера.immutablejs & merge with new key

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