在ImmutableJS中的Map中设置相同的值

时间:2017-08-23 05:34:16

标签: javascript dictionary immutable.js

当我们设置原始值时,如果该值与现有值相同,则不会创建新引用。



const Map = Immutable.Map;
const map1 = Map( {a: 1, b: 2, c: 3 })
const map2 = map1.set('b', 2)
console.log(map1.equals(map2))  // gives true

<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
&#13;
&#13;
&#13;

但是,如果我们设置一个对象,它将始终创建一个新的引用

&#13;
&#13;
const Map = Immutable.Map;
const map1 = Map( {a: 1, b: {trial: 'value'}, c: 3 })
const map2 = map1.set('b', {trial: 'value'})
console.log(map1.equals(map2)) // gives false
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
&#13;
&#13;
&#13;

我该如何避免?如果值完全相同,则不应创建新引用。

1 个答案:

答案 0 :(得分:0)

Map不会将值深度转换为不可变对象,例如您的代码存储两个不同的对象。但是,如果用MapfromJS包裹对象,则可以解决此问题。

&#13;
&#13;
const Map = Immutable.Map;
const map1 = Map( {a: 1, b: Map({trial: 'value'}), c: 3 })
const map2 = map1.set('b', Map({trial: 'value'}))
console.log(map1.equals(map2)) // gives false
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>
&#13;
&#13;
&#13;