角度9-如何正确比较复制的对象的更改?

问题描述

我有一个返回一些数据的API调用

{
  "$group": {
    "_id": {
      "language": "$language","sId": "$sId"
    },"count": {
      "$first": {
        "$sum": "$count"
      }
    }
  }
}

现在在我的项目中,用户可以编辑配置文件信息,然后单击按钮即可进入“编辑”模式。

在进入“编辑”模式时,我将复制当前Profile对象,因此,如果用户还原更改(使用“取消”按钮),我将还原原始数据。

this.myAPI.getProfile().subscribe(result => {
        this.currentProfile = result;
});

一切正常,但是我遇到了一个问题,如果没有更改任何信息,我想禁用“保存”按钮,因此请进行以下检查:

this.currentProfilecopy = JSON.parse(JSON.stringify(this.currentProfile));

问题是,此检查永远不会返回true。 我想这与this.currentProfile == this.currentProfilecopy 有关。

我也尝试过:

JSON.stringify

这也总是返回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