gpt4 book ai didi

javascript - 下划线 isEqual 和 JSON

转载 作者:行者123 更新时间:2023-11-29 22:08:47 24 4
gpt4 key购买 nike

我有一个使用下划线 isEqual 来比较两个 JSON 字符串的问题。目前我在主干中做了一个应用程序,我正在使用 _.isEqual(savedModel.toJSON(),changedModel.toJSON() ) 来检测页面中的模型是否已更改并提示“您有未保存的更改,做你要救吗?”对话框,如果用户厌倦了离开。

出于某种原因,即使我什么也没做或保存了更改,我还是在随机位置出现了对话框。调试快把我逼疯了。

这可能是因为 JSON 不保证 JSON 中对象的顺序,下划线 isEqual 没有正确处理这种情况?所以即使模型相同,JSON 中的某些属性也可能不同并返回 false?

伪代码:

//when entering the page the original model is cloned, when user does changes to the   
//page, the model is cloned again
var savedModel = currentModel.clone().toJSON();

//when the user tries to navigate away from the page
if( _.isEqual(savedModel, model.toJSON() ){
showSavePromptDialog();
}

最佳答案

按照 backbone.toJSON() 使用的函数链,似乎 _.extend 用于复制对象,而 _.extend 使用 for..in 循环迭代对象。 for..in 以任意顺序遍历对象,这可能是问题的根源。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in

关于javascript - 下划线 isEqual 和 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19316043/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com