我有一个API调用,它返回一些数据:
this.myAPI.getProfile().subscribe(result => {
this.currentProfile = result;
});
现在在我的项目中,用户可以编辑个人资料信息,要进入编辑模式,他可以点击一个按钮。
在进入编辑模式时,我会复制当前配置文件对象,因此如果用户恢复更改(通过使用"取消"按钮(,我将恢复原始数据。
this.currentProfileCopy = JSON.parse(JSON.stringify(this.currentProfile));
一切都很好,但我有一个问题,我想保留";保存";如果没有信息被更改,按钮被禁用,因此检查将是:
this.currentProfile == this.currentProfileCopy
问题是,此检查永远不会返回true。我想这和JSON.stringify
有关。
我也试过:
JSON.parse(JSON.stringify(this.currentProfile)) == this.currentProfileCopy
这也总是返回false。。
实现这一点的正确方法是什么?
重要信息:我不能使用LoDash,只有Angular方法,因为我使用的是构建Angular代码的框架,不能导入外部库。我也不能使用类似valueChanges之类的东西,我需要通过比较原始对象和它的副本来做到这一点
没有一个用于比较对象的解决方案。这完全取决于您的对象以及它所包含的数据类型。
根据您有限的信息,我只能建议根据JSON字符串进行比较,因此如下所示:JSON.stringify(this.currentProfile) === JSON.stringify(this.currentProfileCopy)
您可以对比较的两边都使用JSON.stringify
方法。
JSON.stringify(this.currentProfile) === JSON.stringify(this.currentProfileCopy)
您可以使用lodash
库。要比较两个对象,可以使用isEqual
函数。
https://lodash.com/docs/#isEqual