【问题标题】:how to merge map in immutable.js?如何在 immutable.js 中合并地图?
【发布时间】:2017-07-18 02:33:24
【问题描述】:

我想得到如下地图:

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

【问题讨论】:

  • 抱歉,我是 stackoverflow 的新手,不可变
  • 请将您的代码以文本形式发布。代码图像相对没用,有些人无法访问。
  • 你好。例如。让 map1 = Map({a:1,b:{c:2,d:3,e:1});让 map2 = 地图({c:100,d:400});如何获取地图 {a:1,b:{c:100,d:400,e:1}}

标签: javascript reactjs immutable.js


【解决方案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);

【讨论】:

    【解决方案2】:

    由于您的 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-16
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多