我有一个页面,其中有一个(明确定义的)输入数量,用户可以输入数据(即文本框,选择等)。
每当用户填写数据并点击SAVE按钮时,需要在实际的SAVE过程开始之前进行大量的操作和检查。
现在(以下是问题),每当用户点击" X"按钮关闭页面,我想检查数据库是否完全改变(如果是,则提示确认)。
我使用完整的输入列表生成两个对象:
初始值对象在呈现给用户(@scope.Base_Object
)和
使用ng-model
(@scope.Work_Object
)映射到输入的整个输入列表。
注意:两个对象都显示相同的结构,不能更改(即没有添加/删除元素)。
所以,我希望将JSON.stringify(@scope.Base_Object)
与JSON.stringify(@scope.Work_Object)
进行比较,可以告诉我是否有任何更改。
这种方法足够可靠吗?
答案 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。