在 ImmutableJS 的 Map 中设置相同的值

Setting same value in Map in ImmutableJS

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

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>

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

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
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

我怎样才能避免这种情况?如果值完全相同,则不应创建新引用。

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

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
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>