javascript中数组的比较

时间:2012-09-13 18:17:30

标签: javascript arrays

我有两个阵列说a = [1,2,3]b=[1,2,3]

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

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

8 个答案:

答案 0 :(得分:6)

您有2个选项。

Fisrt one是使用自己制作的某种函数,它将迭代两个数组中的每个键并进行比较。

第二个选项是使用来自isEqual的{​​{1}}(一个非常好的JS库,http://underscorejs.org/#isEqual) 这适用于数组和对象。

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

_.underscore

请注意,顺序在对象中无关紧要,因此您可以

var a = {'a' : '1', 'b' : '2', 'c' : '3'};
var b = {'a' : '1', 'b' : '2', 'c' : '3'};
_.isEqual(a, b) // --> true

答案 1 :(得分: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;
}

答案 2 :(得分:6)

如果你知道阵列中有什么(不),你可以使用join

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

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

答案 3 :(得分:2)

(a==b)正在进行参考比较而非内容比较。

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

答案 4 :(得分: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

this jsfiddle中,我有点想法

答案 5 :(得分:1)

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

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
}

答案 6 :(得分: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;

}

答案 7 :(得分:0)

这是我发现的最短路:

""+ar1==""+ar2

Fiddle