Javascript + AngularJS - 比较JSON

时间:2018-03-29 05:19:48

标签: javascript angularjs json

我有一个页面,其中有一个(明确定义的)输入数量,用户可以输入数据(即文本框,选择等)。

每当用户填写数据并点击SAVE按钮时,需要在实际的SAVE过程开始之前进行大量的操作和检查。

现在(以下是问题),每当用户点击" X"按钮关闭页面,我想检查数据库是否完全改变(如果是,则提示确认)。

我使用完整的输入列表生成两个对象:

  1. 初始值对象在呈现给用户(@scope.Base_Object)和

  2. 之前保存整个值列表
  3. 使用ng-model@scope.Work_Object)映射到输入的整个输入列表。

  4. 注意:两个对象都显示相同的结构,不能更改(即没有添加/删除元素)。

    所以,我希望将JSON.stringify(@scope.Base_Object)JSON.stringify(@scope.Work_Object)进行比较,可以告诉我是否有任何更改。

    这种方法足够可靠吗?

1 个答案:

答案 0 :(得分:1)

  

这种方法足够可靠吗?

只有创建对象的方式可靠地以相同的顺序将属性添加到对象(或者在对象上定义自己的toJSON)。 JSON.stringify遵循ES2015中定义的the property order,它对创建属性的顺序很敏感,因此两个等效对象可以具有不同的JSON表示,因为属性顺序可以不同:

var o1 = {a: 1, b: 2}; // Adds `a` before `b`
var o2 = {b: 2, a: 1}; // Adds `b` before `a`
var json1 = JSON.stringify(o1);
var json2 = JSON.stringify(o2);
console.log(json1);
console.log(json2);
console.log(json1 === json2); // false

“深度”等于检查很容易做,更可靠。有several questions and answers showing how to do that,例如this one