6

私は2つの配列を持っていa = [1,2,3]ますb=[1,2,3]

もしそうなら、(a==b)それはfalseを返します。同じ値を持つ 2 つの配列を比較する方法は?

a[0]==b[0]true を返しますが、2 つの異なる配列内の 2 つの同じ要素ではなく、どうすれば 2 つの配列を比較できますか?

4

8 に答える 8

6

2 つのオプションがあります。

最初の 1 つは、自分で作成した何らかの関数を使用して、両方の配列の各キーを反復処理し、それらを比較することです。

2 番目のオプションは、isEqual from _.underscore(非常に優れた JS ライブラリ、http://underscorejs.org/#isEqual ) を使用することです。これは、配列とオブジェクトの両方で機能します。

2番目の方が簡単なので使用します。

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()メソッドを使用して 2 つの配列を文字列に変換し、文字列を比較してみてください。

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 に答える