Ein direkter Vergleich scheint nicht möglich zu sein, aber JSON.stringify funktioniert, wenn die Schlüssel nur sortiert wurden. Wie ich in einem Kommentar betonte
JSON.stringify ({a: 1, b: 2})! == JSON.stringify ({b: 2, a: 1});
Aber wir können das mit einer benutzerdefinierten Stringify-Methode umgehen. Zuerst schreiben wir die Methode
Benutzerdefinierte Stringify
Object.prototype.stringifySorted = function(){
let oldObj = this;
let obj = (oldObj.length || oldObj.length === 0) ? [] : {};
for (let key of Object.keys(this).sort((a, b) => a.localeCompare(b))) {
let type = typeof (oldObj[key])
if (type === 'object') {
obj[key] = oldObj[key].stringifySorted();
} else {
obj[key] = oldObj[key];
}
}
return JSON.stringify(obj);
}
Der Satz
Jetzt benutzen wir ein Set. Wir verwenden jedoch eine Reihe von Zeichenfolgen anstelle von Objekten
let set = new Set()
set.add({a:1, b:2}.stringifySorted());
set.has({b:2, a:1}.stringifySorted());
// returns true
Holen Sie sich alle Werte
Nachdem wir die Menge erstellt und die Werte hinzugefügt haben, können wir alle Werte von abrufen
let iterator = set.values();
let done = false;
while (!done) {
let val = iterator.next();
if (!done) {
console.log(val.value);
}
done = val.done;
}
Hier ist ein Link mit allen in einer Datei
http://tpcg.io/FnJg2i
===
Operators, daher gibt es keine Möglichkeit, den Operator zu überladen . Das ES6-Set-Objekt verfügt über keine Vergleichsmethoden. Die.has()
Methode und die.add()
Methode funktionieren nur, wenn es sich um dasselbe tatsächliche Objekt oder denselben Wert für ein Grundelement handelt.