Bezpośrednie porównanie ich wydaje się niemożliwe, ale JSON.stringify działa, jeśli klucze zostały właśnie posortowane. Jak wskazałem w komentarzu
JSON.stringify ({a: 1, b: 2})! == JSON.stringify ({b: 2, a: 1});
Ale możemy to obejść za pomocą niestandardowej metody stringify. Najpierw piszemy metodę
Niestandardowe 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);
}
Zestaw
Teraz używamy zestawu. Ale zamiast obiektów używamy zestawu ciągów
let set = new Set()
set.add({a:1, b:2}.stringifySorted());
set.has({b:2, a:1}.stringifySorted());
// returns true
Uzyskaj wszystkie wartości
Po utworzeniu zestawu i dodaniu wartości, możemy uzyskać wszystkie wartości według
let iterator = set.values();
let done = false;
while (!done) {
let val = iterator.next();
if (!done) {
console.log(val.value);
}
done = val.done;
}
Oto link ze wszystkim w jednym pliku
http://tpcg.io/FnJg2i
===
operatora. Obiekt set ES6 nie ma żadnych metod porównawczych..has()
Metoda i.add()
sposób nowy utwór tylko na off to jest to samo rzeczywisty przedmiot lub sama wartość dla prymitywne.