2017-07-18 54 views
0

我想圖如下圖所示:如何合併immutable.js中的地圖?

Map{ 
    "status":1, 
    "user":{ 
     "name":"more", 
     "age":8, 
     "id":1 
    } 
} 

我完整的代碼:

import {fromJS} from 'immutable' 
let b={ 
    "user":{ 
     name:"more11", 
     age:8 
    }, 
    "status":1 
} 
let d={ 
    "id":1, 
    "name":"more", 
    "age":19 
} 
let d1=fromJS(d) 
let b2=fromJS(b) 
Const map2=b1.get('user).mergeDeepIn(d1) 
console.log(map2.getIn(['user','name'])); 
console.log(map2.getIn(['user','age'])); 

原始代碼image

+0

對不起,我是新來的stackoverflow和不可變的 – Moretai

+0

請將您的代碼作爲文本發佈。代碼的圖像相對無用,對某些人來說無法訪問。 – 4castle

+0

hello.for例如。讓map1 = Map({a:1,b:{c:2,d:3,e:1});讓map2 = Map({c:100,d:400});如何獲得地圖{a:1,b:{c:100,d:400,e:1}} – Moretai

回答

0

由於您的MAP1嵌套,並且MAP1只匹配的嵌套部分它沒有辦法自動合併它們而沒有實際指出去哪裏。

下面是使用對象傳播算子合併基礎映射對象的示例:

import { Map } from 'immutable' 

const map1 = new Map({ 
    a: 1, 
    b: { 
    c: 2, 
    d: 3, 
    e:1 
    }, 
}) 

const map2 = new Map({ 
    c: 100, 
    d: 400 
}) 

const map3 = new Map({ 
    ...map1.toObject(), 
    b: { 
    ...map1.get('b'), 
    ...map2.toObject(), 
    } 
}) 

console.log(
    map3.toObject() // Map { a: 1, b: { c: 100, d: 400, e: 1} } 
) 

同樣能夠以更簡潔的方式來實現使用Ramda

import R from 'ramda' 

const map4 = new Map(
    R.evolve({ b: R.merge(R.__, map2.toObject()) }, map1.toObject()) 
) 

演示:http://jsbin.com/refayef/2/edit?js,console

+0

非常感謝〜 – Moretai

+0

不客氣。樂意效勞 –

1
const { Map } = require('immutable') 

let map1 = Map({a:1,b:{c:2,d:3,e:1}}); 

let map2 = Map({c:100,d:400}); 
let map3 = Map(map1.get('b')); 
let map4 = map3.merge(map2); 
let map5 = map1.set('b',map4); 
console.log(map5);