javascript中数组的比较

javascript中数组的比较,javascript,arrays,Javascript,Arrays,我有两个数组,分别是a=[1,2,3]和b=[1,2,3] 如果我执行(a==b),则返回false。如何比较具有相同值的两个数组 a[0]==b[0]将返回true,但我们如何比较两个数组,而不是两个不同数组中的两个相同元素?(a==b)正在进行引用比较,而不是内容比较 为此提供了一些功能。您有两个选项 第一种方法是使用自己制作的函数,迭代两个数组中的每个键并比较它们 第二个选项是使用中的isEqual(一个非常好的JS库,) 这将适用于数组和对象 我会用第二个,因为它更容易 var a =

我有两个数组,分别是
a=[1,2,3]
b=[1,2,3]

如果我执行
(a==b)
,则返回false。如何比较具有相同值的两个数组

a[0]==b[0]
将返回true,但我们如何比较两个数组,而不是两个不同数组中的两个相同元素?

(a==b)
正在进行引用比较,而不是内容比较

为此提供了一些功能。

您有两个选项

第一种方法是使用自己制作的函数,迭代两个数组中的每个键并比较它们

第二个选项是使用
中的
isEqual
(一个非常好的JS库,) 这将适用于数组和对象

我会用第二个,因为它更容易

var a = {'a' : '1', 'b' : '2', 'c' : '3'};
var b = {'a' : '1', 'b' : '2', 'c' : '3'};
_.isEqual(a, b) // --> true
请注意,顺序在对象中并不重要,因此您可以

var a = {'a' : '1', 'b' : '2', 'c' : '3'};
var b = {'c' : '3', 'b' : '2', 'a' : '1'}
_.isEqual(a, b) // --> also true
函数数组\u比较(a,b)
{
//如果长度不同,则数组不相等
如果(a.长度!=b.长度)
返回false;
对于(i=0;i
如果要比较两个数组,可以使用
JSON.stringify

JSON.stringify([1,2,3]) === JSON.stringify([1,2,3]); //=> true
它还将比较数组中的[嵌套]对象或数组中的[嵌套]数组:

JSON.stringify([1,2,3,{a:1,b:2}]) === 
  JSON.stringify([1,2,3,{'a':1,b:2}]); //=> true

JSON.stringify([1,2,3,{a:1,b:2,c:{a:1,b:2}}]) === 
  JSON.stringify([1,2,3,{'a':1,b:2,c:{a:1,b:2}}]); //=> true

JSON.stringify([1,2,3,{a:1,b:2,c:[4,5,6,[7,8,9]]}]) === 
  JSON.stringify([1,2,3,{'a':1,b:2,c:[4,5,6,[7,8,9]]}]); //=> true
在中,如果您知道在阵列中可以使用什么(不)的话,我对这个想法做了一些尝试:


我知道,这远不是防弹的,但在某些情况下它是可用的(当您知道两个数组中的顺序相同时)。

尝试使用javascripts方法将两个数组转换为字符串,然后比较字符串:

将所有数组元素的字符串转换合并为一个字符串。

var a1 = array1.join();
var a2 = array2.join();

if(a1 == a2){
  //do something
}

这是我找到的最短的路:

""+ar1==""+ar2

您必须编写代码来比较数组中的每个元素,以实现您的目标

// this is one way of doing it, and there are caveats about using instanceOf. 
// Its just one example, and presumes primitive types.
function areArrayElementsEqual(a1, a2)
{
    if (a1 instanceof Array) && (a2 instanceof Array)
    {
        if (a1.length!=a2.length)
            return false;
        else{
           var x;
           for (x=0;x<a1.length; x++)
              if (a1[x]!=a2[x])
                 return false;
        }
    }

    return true;

}
//这是一种方法,使用instanceOf有一些注意事项。
//这只是一个例子,并假定基本类型。
功能区面积基准(a1、a2)
{
if(a1数组实例)&(a2数组实例)
{
如果(a1.长度!=a2.长度)
返回false;
否则{
var x;

对于(x=0;XY您必须编写代码来循环所有元素。@我通常会这样做。但我只是想知道除了循环之外还有其他方法吗?没有,JavaScript中没有内置的数组比较工具。有没有方法比较两个数组?这似乎是我要寻找的答案,但如果数组中有对象,它会返回tr吗ue?是的,如果对象相等:
JSON.stringify([1,2,3,{a:1,b:2}])==JSON.stringify([1,2,3,{a:1,b:2}]))
返回
true
如果对象包含相等的key:value对,但顺序不同,则此操作不起作用。无法比较将其转换为字符串的对象。这会带来麻烦。@alexandernst:这取决于您希望如何使用它。对于具有相同值的不同排序数组,此操作也不起作用。在这种情况下,请对ar进行排序光线/对象[-关键点]比较之前可能是一个选项。没有完整的或本机javascript解决方案,JSON的想法在我看来是相当有用的。在任何语言中,通过将对象转换为字符串来比较对象都不是一个好主意,也不是一个好选项。不要试图通过将柠檬涂成红色来比较柠檬和苹果。
array\u compare([1,2,3,{a:1,b:2}],[1,2,3,{a:1,b:2}])
返回
false
,因此我认为这仅适用于包含基元值的数组。如果数组中的对象不相等,则返回假阳性。例如:但这又如何?
[“a,b”]。join()=[“a”,“b”]。join()
那么你需要一个自定义分隔符。我知道,使用join不是防弹的,但它可以很好地工作,因为我或多或少知道数组中会出现什么(不是)。分隔符也不能在所有情况下都工作;例如,
[“a”,“b”]。join(“| |”)=[“a | | b”]。join(“| | |”)
True,这只在某些情况下有效(请参阅前面的注释).我更新了答案以强调这一点。
""+ar1==""+ar2
// this is one way of doing it, and there are caveats about using instanceOf. 
// Its just one example, and presumes primitive types.
function areArrayElementsEqual(a1, a2)
{
    if (a1 instanceof Array) && (a2 instanceof Array)
    {
        if (a1.length!=a2.length)
            return false;
        else{
           var x;
           for (x=0;x<a1.length; x++)
              if (a1[x]!=a2[x])
                 return false;
        }
    }

    return true;

}