6

我有两个数组说a = [1,2,3]b=[1,2,3]

如果我这样做(a==b),它会返回 false。如何比较具有相同值的两个数组?

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

4

8 回答 8

6

您有 2 个选项。

第一个是使用自己制作的某种函数,它将遍历两个数组中的每个键并比较它们。

第二个选项是使用isEqual from _.underscore(一个非常好的 JS 库,http://underscorejs.org/#isEqual)这将适用于数组和对象。

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

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
于 2012-09-13T18:20:11.080 回答
6
function array_compare(a, b)
{
    // if lengths are different, arrays aren't equal
    if(a.length != b.length)
       return false;

    for(i = 0; i < a.length; i++)
       if(a[i] != b[i])
          return false;

    return true;
}
于 2012-09-13T18:20:29.760 回答
6

如果您知道您的阵列中会发生什么(不),您可以使用join

a.join() == b.join()

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

于 2012-09-13T18:21:39.057 回答
2

(a==b)正在做参考比较而不是内容比较。

Underscore.js为此带来了一些功能。

于 2012-09-13T18:18:25.887 回答
2

如果要比较 2 个数组,可以使用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

这个 jsfiddle中,我对这个想法进行了一些尝试

于 2012-09-13T18:20:56.443 回答
1

尝试使用 javascripts Join()方法将两个数组转换为字符串,然后对字符串进行压缩:

加入() The string conversions of all array elements are joined into one string.

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

if(a1 == a2){
  //do something
}
于 2012-09-13T18:23:16.763 回答
1

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

// 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;

}
于 2012-09-13T18:25:38.280 回答
0

这是我发现的最短方式:

""+ar1==""+ar2

小提琴

于 2012-09-13T18:25:02.580 回答