2017-03-08 8 views
0

ランダムなジェネレータを使用して数値のペアを作成しており、数値のペアが以前に発生したかどうかを判断する必要があります。私はSet()を使うことを考えましたが、うまくいかないようです。オブジェクト/配列を持つJavascript Set/WeakSetデータ構造

var a = [1, 2] 
var s = new Set(); 
s.add(a) //Set {[1, 2]} 
s.add([1, 2]) //Set {[1, 2], [1, 2]} 

これは、JSが値とは対照的に参照を格納するためだと考えられます。その配列/ペアを一度しか格納せず、値に基づいてTRUEを返す方法はありますか?

+1

あなたはあなた自身の質問に答えました。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set "Setオブジェクトを使用すると、プリミティブ値でもオブジェクト参照でも、すべての型の一意の値を格納できます。 2つの配列は固有の参照です。 's.add(a);'をもう一度試しても、配列を再追加することはありません。 – TheJim01

答えて

0

JavaScriptが===と等しいかどうかを確認します。欠点は、オブジェクト/配列/関数を比較することは通常、単純ではないことです。

フォーマットに一貫性がある場合は、少し醜いハックを使用することができます:JSON.stringify()あなたの配列とセットに文字列を追加します。文字列は、異なる参照を持つ配列とは異なり、等しいと見なされます。

関連する問題