确定node.js中JSON格式对象的相等性

Dan*_*Dan 7 json node.js

在node.js中比较两个JSON格式的对象数据的最有效方法是什么?

这些对象不包含"undefined"或函数,它们的原型是Object.

我听说如果在node.js中有JSON,那么有很好的支持

Dan*_*Dan 6

朋友们!如果我听不懂或用错误的术语解释问题,我深感抱歉。我要做的就是比较两个JSON标准化数据的相等性,如下所示:

{"skip":0, "limit":7, "arr": [1682, 439, {"x":2, arr:[]}] }

{"skip":0, "limit":7, "arr": [1682, 450, "a", ["something"] }

我100%肯定这些数据中不会有任何功能Datenullundefined等等。我想说的是,我不想在最一般的情况下比较JavaScript对象(具有复杂的原型,循环链接和所有这些东西)。这些数据的原型将是Object。我也相信很多熟练的程序员已经回答了我这个问题。

我最想念的是我不知道如何正确解释我的问题。请随时编辑我的帖子。

我的答案:

第一种方式:效率低下但可靠。您可以像这样修改通用方法,这样就不会浪费时间寻找函数和undefined。请注意,泛型方法将对象重复三次(for .. in内部有三个循环)

第二种方式:高效但有一个限制。我发现JSON.stringifynode.js中速度非常快。最快的解决方案是:

JSON.stringify(data1) == JSON.stringify(data2)

非常重要的提示!据我所知,JavaScript和JSON都与对象字段的顺序无关。但是,如果比较由对象组成的字符串,这将非常重要。在我的程序中,对象字段始终以相同的顺序创建,因此上面的代码可以正常工作。我没有在V8文档中进行搜索,但是我认为我们可以依靠字段创建顺序。在其他情况下,请注意使用此方法。

在我的具体情况下,第二种方法的效率是第一种方法的10倍。

  • 但是第二种方法可靠吗?我听说此方法引起争议,因为javascript不会保留属性顺序,而您的解决方案取决于此。 (4认同)