如果你比較兩個數組與「==」運營商,他們將永遠不會平等。他們是不同的實例。
如果要使用一個數組對象:
- 定義兩個數組如何比較。
- 創建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
沒有這樣的事情,因爲沒有對每個對象的通用'equals'方法。你可以使用'set.values()'並使用'some'方法。 (但是這是你如何比較兩個陣列的責任)。 – zerkms
'[1]'是一個數組對象_initializer_。每次將其作爲表達式求值時,都會根據遇到的「字面說明符」創建並初始化一個新的Array對象。你可以在一個Set中擁有許多不同的Array對象和相同的值元素! – traktor53