私は2つの配列を持っていa = [1,2,3]
ますb=[1,2,3]
もしそうなら、(a==b)
それはfalseを返します。同じ値を持つ 2 つの配列を比較する方法は?
a[0]==b[0]
true を返しますが、2 つの異なる配列内の 2 つの同じ要素ではなく、どうすれば 2 つの配列を比較できますか?
私は2つの配列を持っていa = [1,2,3]
ますb=[1,2,3]
もしそうなら、(a==b)
それはfalseを返します。同じ値を持つ 2 つの配列を比較する方法は?
a[0]==b[0]
true を返しますが、2 つの異なる配列内の 2 つの同じ要素ではなく、どうすれば 2 つの配列を比較できますか?
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
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;
}
配列に何が期待されるか(期待されないか)がわかっている場合は、次を使用できますjoin
。
a.join() == b.join()
これは防弾には程遠いですが、場合によっては使用できます (両方の配列の順序が同じであることがわかっている場合)。
(a==b)
コンテンツ比較ではなく参照比較を行っています。
Underscore.jsはそのための機能を提供します。
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では、アイデアを少し試しました
目的を達成するには、配列の各要素を比較するコードを記述する必要があります。
// 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;
}