Les comparer directement ne semble pas possible, mais JSON.stringify fonctionne si les clés viennent d'être triées. Comme je l'ai souligné dans un commentaire
JSON.stringify ({a: 1, b: 2})! == JSON.stringify ({b: 2, a: 1});
Mais nous pouvons contourner cela avec une méthode stringify personnalisée. Nous écrivons d'abord la méthode
Stringify personnalisé
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);
}
L'ensemble
Maintenant, nous utilisons un ensemble. Mais nous utilisons un ensemble de chaînes au lieu d'objets
let set = new Set()
set.add({a:1, b:2}.stringifySorted());
set.has({b:2, a:1}.stringifySorted());
// returns true
Obtenez toutes les valeurs
Après avoir créé l'ensemble et ajouté les valeurs, nous pouvons obtenir toutes les valeurs par
let iterator = set.values();
let done = false;
while (!done) {
let val = iterator.next();
if (!done) {
console.log(val.value);
}
done = val.done;
}
Voici un lien avec tout dans un fichier
http://tpcg.io/FnJg2i
===
opérateur. L'objet set ES6 ne possède aucune méthode de comparaison. La.has()
méthode et la.add()
méthode fonctionnent uniquement sur le fait qu'il s'agit du même objet réel ou de la même valeur pour une primitive.