をチェックするための基本的なループを使用することができます。彼らは別のインスタンスです。
あなたは配列オブジェクトを使用したい場合:
- は、2つの配列を比較する方法を定義します。
- Setのサブクラスを作成し、 "has"メソッドをオーバーライドします。
。
function eqArray (a1, a2) {
if (!(a1 instanceof Array && a2 instanceof Array))
return false;
if (a1.length != a2.length)
return false;
for (var i = 0, n=a1.length; i < n; i++) {
if (a1[i] instanceof Array && a2[i] instanceof Array) {
if (!eqArray(a1[i], a2[i]))
return false;
}
else if (a1[i] != a2[i])
return false;
}
return true;
}
function MySet(elems) {
var set = new Set (elems);
set.__proto__ = MySet.prototype;
return set;
}
MySet.prototype = new Set;
MySet.prototype.has = function (elem) {
if (elem instanceof Array){
for (var v of this) {
if (v instanceof Array && eqArray(elem,v))
return true;
}
return false;
}else {
return Set.prototype.has.call (this, elem);
}
}
var a = new MySet();
a.add([1]);
a.has([1]); //true
eqArray([1],[1]); //true
すべてのオブジェクトに共通の「等価」メソッドがないため、このようなことはありません。あなたは 'set.values()'をとり、 'some'メソッドを使うことができます。 (しかし、2つの配列を比較する方法はあなたの責任です)。 – zerkms
'[1]'はArrayオブジェクト_initializer_です。式として評価されるたびに、新しいArrayオブジェクトが作成され、発生した "リテラル指定子"に従って初期化されます。あなたは、あなたが好きなようにセット内の等しい値の要素を持つ多くの異なるArrayオブジェクトを持つことができます! – traktor53