我想得到如下地图:
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 :(得分:3)
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);
答案 1 :(得分: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())
)