2016-03-24 9 views
1

あなたは比較

var hits = ["a", "b", "c"]; 
 

 
if (hits !== ["a", "b", "c"]){ 
 
//Do some stuff here 
 
};

あなたはcomparsionとして、配列の値を使用することができますとして配列の値を使用できますか?上記のことは私にとってはうまくいかないようですが、これがこの方法かどうか、または比較のために配列のリテラル値にアクセスする別の方法があるのだろうかと思いました。

+4

http://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript –

+0

あなたは簡単に配列の比較のための関数を書くことができます。 –

+0

配列はオブジェクトなので、そのような配列は比較できません。オブジェクトに対して比較演算子を使用すると、その参照が比較され、比較結果が返されます。 –

答えて

0

あなたは(===!==)は、オブジェクトの場合はの参照ではなく、値を比較し、この

if (JSON.stringify(hits) === JSON.stringify(["a", "b", "c"])) { 
5

等価演算子を書くことができます。 JavaScriptの配列はオブジェクトです。このため、これらは2つの異なる配列(同じ外観、同じ値を持ちますが、同じ配列ではありません)が異なるため、参照が異なります。

両方のオペランドがオブジェクトの場合、JavaScriptは比較しますオペランドがメモリ内の同じオブジェクトを参照するときに等しい内部参照。

MDNについて詳しく読むことができます。

注:==!=等価演算子は(も参照してオブジェクトを比較し、彼らはただ単純な比較(と、それは多くの場合、予期しないです)以上のことをするので、一般的にそれらを使用し、常に厳密な等価演算子に固執しないことをお勧めします===および!==)。

どのように配列を比較するのですか?

少なくともいくつかの方法があります。いくつかの人々は、両方の配列のJSON.stringifyを比較することをお勧めしますが、単純なケースでは機能しますが、それはパフォーマンス上の良い解決策ではありません。ここでより良い方法を見つけることができますhttps://stackoverflow.com/a/14853974/704894

lodashunderscoreのようなユーティリティライブラリを使用した場合、この機能は既に存在します。 https://lodash.com/docs#isEqual

+1

だから '=='と '!='はどうですか?彼らは参照を比較するだろうか? –

+1

なぜ ''a' === 'a''が' true'を返すのですか? – Lewis

+0

@RajaprabhuAravindasamyはい、そうです。私はこれを私の答えに加えました。 –

0

Javascriptが配列を処理する方法のために、このようにすることはできません。値が同じかどうかをチェックしていないので、オブジェクトが同じオブジェクト(存在しない)であることを確認しています。

+0

これは実際には良い考えではありません。もしあなたがこのようなものを配列に持っていたら? '[' a '、' b、b '、' c ']'のようなものである。 'true'を返しますが、それらは同じ配列ではありません。 – Paulooze

+1

ええ、はい、もちろん - 私は提案されたコードを削除します – millerbr