Create deep copy in angular 2
如何在Angular2中创建深度复制,我尝试使用let newObject = Object.assign({}, myObject),但myObject仍然反映了newobject中所做的所有更改。
- 我认为它的字体问题不是角度2。如果我错了就纠正我
- 你的意思是深拷贝还是浅拷贝?stackoverflow.com/questions/184710/…
- @Surajrao好了,现在我也很困惑,我只想在完成对该对象的工作时将对象重置为其默认状态。所以要做到这一点,我需要存储默认副本,但是当我在一个地方进行更改时,所有其他副本也会发生更改。如何预防这种情况?
- 这意味着你需要一份深入的副本。最好编辑问题。
- stackoverflow.com/questions/122102/…
- 喜欢使用第三方库,如lodash、lodash.com/docs/4.17.2 clonedeep
- @A.T.jQuery.extend()在这里工作得很好,我已经在我的项目中使用了jQuery,那么仅仅为了一个目的加载整个新lib有什么好处呢?
- @Dheerajagrawal你没有提到你在哪里使用jquery,顺便说一句,我是美元的大粉丝,但是我更喜欢lodash的角度开发。
- 嘿!不要忘记将问题标记为已解决;)
只需使用以下功能:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| /**
* Returns a deep copy of the object
*/
public deepCopy(oldObj: any) {
var newObj = oldObj;
if (oldObj && typeof oldObj ==="object") {
newObj = Object.prototype.toString.call(oldObj) ==="[object Array]" ? [] : {};
for (var i in oldObj) {
newObj[i] = this.deepCopy(oldObj[i]);
}
}
return newObj;
} |
尝试使用lodash.js。因为角2没有任何深度复制方法。参考:https://lodash.com/docs clonedeep
或者可以使用这个javascript函数
1
| var copy = Object.assign({}, myObject); |
- 你认为仅仅为了这一个特征而包括罗达什是合理的吗?要添加2个数字,您会安装math.js吗?那么,您会继续为您遇到的每一个琐碎的任务添加随机的第三方库吗?
- 所以我给了第二个选择
- 我知道,但遗憾的是,那是错误的。请参阅文档:对于深度克隆的警告对于深度克隆,我们需要使用其他替代方法,因为object.assign()复制属性值。如果源值是对对象的引用,则它只复制该引用值。developer.mozilla.org/en/docs/web/javascript/reference/…