首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Immutable.js不复制对象

Immutable.js不复制对象
EN

Stack Overflow用户
提问于 2018-04-15 03:38:21
回答 1查看 4.2K关注 0票数 2

我一直在测试Immutable.js,下面的代码为不可变地图中的对象设置了一个键。在将键设置为该对象后,原始对象将发生变异。通过运行下面的代码可以看到,当从Immutable.js映射获取对象并记录它时,Immutable.js映射中的对象引用的是原始的变异对象。

Immutable.js的目的不是每次设置新数据时都返回一个新的不可变副本吗?我还以为会有个深克隆人呢?

代码语言:javascript
复制
const Immutable = require('immutable');

const testObj = { id: 'a' };
console.log('TEST OBJECT');
console.log(testObj); // { id: 'a' }

const newMap = Immutable.Map();
const newMap2 = newMap.set('a', testObj);
console.log('AFTER INITIAL IMMUTABLE SET');
console.log(newMap2.get('a')); // { id: 'a' }

testObj.id = 'z';
console.log('AFTER MUTATING ID IN TESTOBJ');
console.log(testObj); // { id: 'z' }
console.log(newMap2.get('a')); // { id: 'z' }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-15 03:45:00

newMap2.id设置为引用对象testObj,而不是testObj的值。

如果您想将newMap设置为testObj的值,您可以这样做:

代码语言:javascript
复制
const newMap = Immutable.Map({a: Immutable.Map(testObj)); 

或者使用fromJS进行深度克隆(参见https://facebook.github.io/immutable-js/docs/#/fromJS)

代码语言:javascript
复制
const newMap = Immutable.fromJS({a: testObj)); 

然后使用toJS获取值,如果您想要一个标准的js对象(请参阅https://facebook.github.io/immutable-js/docs/#/Map/toJS)

代码语言:javascript
复制
newMap.get('a').toJS();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49838258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档