我目前正在构建一个小型应用程序,是Vanilla JS(没有像lodash / jquery这样的任何依赖项),我需要比较两个对象以检查键和值是否相等。我只是想知道如何优化这个问题。
两个对象的键的顺序与从相同方法派生的键相同。根据此answer,最快,最有效的方法是使用JSON.stringify(object1) === JSON.stringify(object2)
。
但是,在我的应用程序中,如果两个对象不相等,那么我将遍历两个对象并执行一些操作。问题在于这些操作的性能相当高,并且偶尔会运行。我需要优化我的解决方案。
因此,我想知道JSON.stringify
是否也在内部运行某种for
循环。在我的应用程序中,两个对象不平等的可能性更大。因此,如果JSON.stringify
也运行某种类型的for
循环,我可以删除检查并立即运行所需的操作(,这只会在程序中造成差异,如果两者对象不相等),从而节省了时间并对其进行了优化。如果我不这样做,那么从技术上讲,当两个对象不相等时,将出于相同的目的运行两个for
循环,而当两个对象相等时,将以两种方式运行一个for
循环。如果JSON.stringify
在内部是某种for
循环,那么无论对象是否相等,我都只能循环一个for
。我在这里有意义吗?如果您听不懂,请告诉我。此检查没用吗,我应该删除它以优化代码吗?
答案 0 :(得分:1)
您的问题涉及4个不同的领域:
JSON.stringify
的实现(以及性能)JSON.stringify
是大对象的内存消耗)因此,很明显,现在所有JS引擎和OS都有“通用”答案。
我建议您检查代码中的内容...为什么?
isEqual
方法是一种很好的做法当然也有缺点: