J'utilise jshashtable.js de Tim Down. Je peuplant deux tables de hachage différentes en utilisant l'objet clé suivante qui implémente les deux hashCode() et equals():jshashtable ne reconnaît pas les clés équivalentes
function Key(did, oId){
this.dId = dId;
this.oId = oId;
this.hashCode = function(obj) {
//alert("hashCode: " + this.dId+"-"+this.oId);
return this.dId+"-"+this.oId;
}
this.equals = function(obj) {
//alert("obj.dId: "+ obj.dId + " this.dId: " + this.dId + "\nobj.oId: " + obj.oId + " this.oId: " + this.oId);
//alert("dId compare: " + obj.dId == this.dId + " oId compare: " + obj.oId == this.oId);
alert("obj instanceof Key: " + obj instanceof Key);
return (obj instanceof Key) &&
(obj.dId == this.dId) &&
(obj.oId == this.oId);
};
}
Je suis itérer alors plus d'un Hashtable et en utilisant containsKey() afin de décider si cette clé existe dans la table de hachage que je suis en train d'itérer et en ajoutant la nouvelle paire clé/valeur, ou non, en fonction du booléen retourné par la méthode containsKey(). Le problème que je vois est que bien que la méthode hashCode() alerte la même chaîne, l'objet equals() retourne false, donc il pense toujours qu'il a une nouvelle clé.
J'ai essayé d'utiliser une chaîne littérale comme clé aussi dId + '-' + oId, ce que je pensais devoir fonctionner aussi. Quand ce n'est pas le cas, j'ai essayé l'objet avec hashCode() et equals() qui ne semble pas non plus fonctionner. Il est peut-être intéressant de noter que oId pourrait être une chaîne de caractères "5" ou un nombre 5. Cependant, je pensais que puisque Javascript n'est pas fortement typé, cette différence ne devrait pas importer - d'autant plus, quand concaténée avec le dId + '-' ça devrait devenir une chaîne.
Des idées sur pourquoi les comparaisons ne semblent pas fonctionner? Merci à l'avance
Tim - merci pour votre réponse rapide. Mon utilisation ressemble à -> \t 'var h1 = new Hashtable(); \t var h2 = nouveau Hashtable(); \t var k1 = nouvelle clé ("d", 6), k2 = nouvelle clé ("d", "6"); \t h1.put (k1, 1); \t h2.put (k2, 2); \t \t h2.each (fonction (clé, valeur) {\t \t \t \t \t alerte ("h2 a "+ key.hashCode() +":" + h2.containsKey (touche)); \t \t}); 'Cependant, cette utilisation fonctionne également dans cet exemple. Je vais enquêter plus loin. – MTurner
Tim - J'ai trouvé mon erreur de logique qui me faisait croire que les clés comparaient. Merci encore! – MTurner