Javascript 比较对象数组,最佳方式

Javascript 比较对象数组,最佳方式,javascript,arrays,object,optimization,compare,Javascript,Arrays,Object,Optimization,Compare,我有两个数组。在每个数组中,我都有很多属性但没有方法的对象。 我需要看看数组1和数组2是否相等 一种方法是创建一个函数,该函数通过数组的每个元素,并将对象的每个属性与第二个数组中相似位置的对象进行比较 问题是数组非常大,而且每个对象都有很多属性。我在想是否还有别的办法。以C++为例,我可以读取内存…但我不知道如何在js中做到这一点 我需要获得最佳的方法,因为这是经常使用的函数的一部分。除非它们是相同的数组实例,否则比较内存位置在JavaScript中是不起作用的(当您执行arr1==arr2时会

我有两个数组。在每个数组中,我都有很多属性但没有方法的对象。 我需要看看数组1和数组2是否相等

一种方法是创建一个函数,该函数通过数组的每个元素,并将对象的每个属性与第二个数组中相似位置的对象进行比较

问题是数组非常大,而且每个对象都有很多属性。我在想是否还有别的办法。以C++为例,我可以读取内存…但我不知道如何在js中做到这一点


我需要获得最佳的方法,因为这是经常使用的函数的一部分。

除非它们是相同的数组实例,否则比较内存位置在JavaScript中是不起作用的(当您执行
arr1==arr2
时会发生什么情况)

您需要显式地循环

有些人在两个数组上都使用
JSON.stringify()
(注意注释中解释的问题),并将结果字符串进行比较以进行欺骗,但序列化为字符串并比较声音对我来说是非常昂贵的。但是它可以工作,所以如果没有性能问题,那就发疯吧!:)

您也可以尝试
toSource()


我将构建自己的比较函数,该函数的比较刚好满足我的相同概念。

JQuery有一个函数,名为序列化对象

您可以像这样比较对象或对象数组

$.param( originalObj ) == $.param( modifiedObj )

它的功能非常强大,可以用来克隆对象

将数组转换为字符串,然后比较字符串将具有相同的平均和最差性能:O(n)(线性)

如果在对象属性/数组中循环并在第一次不匹配时中止,则最差的性能仍将为O(n),但除非您比较的对象通常相同,否则您的平均性能可能会显著提高。无论哪种方式,由于这种遍历都不包括创建任何新对象和复制周围的字节,因此即使比较相同的复合对象/数组(最坏的情况)也应该比串化它们更快

正如答案所示,您可以使用:

根据文档:在两个对象之间执行优化的深度比较,以确定它们是否应该被视为相等


我很确定它也适用于阵列。

存在性能问题:)。如果比较arr1==arr2,则由于内存位置不同,因此将始终返回false。我需要比较从该位置到数组末尾的内存“在内存方面”,将其与数组末尾的第二个位置进行比较。请原谅我的英语。@zozojavascript数组实际上是具有一些特殊方法和属性的对象。它们通常不像其他语言的数组实现顺序存储,不能直接访问C++中的内存地址。JavaScript只是一个愚蠢的界面,您所能做的就是以某种方式比较对象。我也会使用
JSON.stringify
。还有
uneval
。是的。。。所以基本上我无法避免这两个循环。这太糟糕了|<代码>JSON.stringify似乎取决于添加属性的顺序
JSON.stringify({a:1,b:2})==JSON.stringify({b:2,a:1})
产生
false
,所以我真的不推荐它。这段代码可以帮助您。