Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript+;AngularJS-比较JSON_Javascript_Angularjs_Json - Fatal编程技术网

Javascript+;AngularJS-比较JSON

Javascript+;AngularJS-比较JSON,javascript,angularjs,json,Javascript,Angularjs,Json,我有一个页面,其中有(定义良好的)输入数量,用户可以在其中输入数据(即文本框、选择等) 每当用户填充数据并单击“保存”按钮时,在实际保存过程开始之前,都需要进行大量操作和检查 现在(问题就在这里),每当用户单击“X”按钮关闭页面时,我都想检查数据库是否有任何更改(如果有,则提示确认) 我使用完整的输入列表生成两个对象: 初始值对象,在呈现给用户之前保存整个值列表(@scope.Base_object),以及 使用ng model(@scope.Work\u Object)映射到输入的整个输入列表

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

每当用户填充数据并单击“保存”按钮时,在实际保存过程开始之前,都需要进行大量操作和检查

现在(问题就在这里),每当用户单击“X”按钮关闭页面时,我都想检查数据库是否有任何更改(如果有,则提示确认)

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

  • 初始值对象,在呈现给用户之前保存整个值列表(
    @scope.Base_object
    ),以及

  • 使用
    ng model
    @scope.Work\u Object
    )映射到输入的整个输入列表

  • 注意:两个对象显示相同的结构,不能更改(即不添加/删除任何元素)

    因此,我希望将
    JSON.stringify(@scope.Base\u Object)
    JSON.stringify(@scope.Work\u Object)
    进行比较,可以告诉我是否有任何更改

    这种方法足够可靠吗

    这种方法足够可靠吗

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

    VarO1={a:1,b:2};//在'b'之前添加'a'` VarO2={b:2,a:1};//在'a'之前添加'b'` var json1=JSON.stringify(o1); var json2=JSON.stringify(o2); console.log(json1); log(json2);
    console.log(json1==json2);//false感谢T.J.的回复。我构建这两个对象的方式是:(1)使用所有字段及其初始值构建基本对象,然后(2)将工作对象构建为
    @scope.WORK\u object=JSON.parse(JSON.stringify(@scope.BASE\u object))
    。根据你的回答,我相信我的问题的答案是“是的”,不是吗?@FDavidov:鉴于此,我无法立即思考为什么它会不可靠,但FWIW我仍然不会这么做。再次强调,深度相等性检查很容易,即使创建对象的代码随着时间的推移不可避免地被修改,它也会继续工作。好的,明白了(并标记了您的答案)。尽管如此,由于未来的任何更改都只会对基础对象(工作对象从中派生)进行,因此我对这个替代方案感到满意。非常感谢@弗达维多夫:这完全是你的决定。:-)我知道。。。尽管如此,有时你还是得凭直觉;-)