美文网首页
2019-04-04 immutable.js 中 merge、

2019-04-04 immutable.js 中 merge、

作者: KingAmo | 来源:发表于2019-04-04 21:46 被阅读0次

immutable.js 中,Map对象有个 mergemergeDeep 方法

merge

参数可以是immutable对象或者js对象,如果是js对象,参数只是被浅层的转换成 immutable 数据,深层的对象还是 js 对象.

      const map = new Map({ key1: 'value' });
      const a = { key2: { x: 1 } };
      const b = map.merge(a);

如上的例子,b.get('key2') 得到的是一个JS对象。直接用 .x 获得值1(而不是.get('x')

mergeWith

const one = Map({ a: 10, b: 20, c: 30 })
const two = Map({ b: 40, a: 50, d: 60 })
one.mergeWith((oldVal, newVal) => oldVal / newVal, two)
// { "a": 0.2, "b": 0.5, "c": 30, "d": 60 }
two.mergeWith((oldVal, newVal) => oldVal / newVal, one)
// { "b": 2, "a": 5, "d": 60, "c": 30 }

mergeWithmerge 多了一个参数,需要传入一个函数,当要合并的对象有相同的属性时,会调用这个函数,并且把两个有冲突的属性当做参数传入函数。

mergeDeep

const { Map } = require('immutable')
const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) })
const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) })
one.mergeDeep(two)
// Map {
//   "a": Map { "x": 2, "y": 10 },
//   "b": Map { "x": 20, "y": 5 },
//   "c": Map { "z": 3 }
// }

mergeDeepmerge 类似,但是当两个对象有相同的属性时,merge 只是简单的浅替换,而 mergeDeep 是深层的替换(会遍历嵌套的属性)

mergeDeepWith

const { Map } = require('immutable')
const one = Map({ a: Map({ x: 10, y: 10 }), b: Map({ x: 20, y: 50 }) })
const two = Map({ a: Map({ x: 2 }), b: Map({ y: 5 }), c: Map({ z: 3 }) })
one.mergeDeepWith((oldVal, newVal) => oldVal / newVal, two)
// Map {
//   "a": Map { "x": 5, "y": 10 },
//   "b": Map { "x": 20, "y": 10 },
//   "c": Map { "z": 3 }
// }

mergeWith 类似。

相关文章

网友评论

      本文标题:2019-04-04 immutable.js 中 merge、

      本文链接:https://www.haomeiwen.com/subject/iqeqiqtx.html