0
我使用Tim Down的jshashtable.js。我使用的同時實現了hashCode()和equals()方法下面重點對象填充兩種不同的哈希表:jshashtable不識別等效鍵
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);
};
}
我然後再遍歷一個哈希表並且爲了如果此鍵來決定使用的containsKey()存在於我正在迭代並基於containsKey()返回的布爾值添加新的鍵/值對的散列表中。我看到的問題是,雖然hashCode()方法警告同一個字符串,但對象equals()返回false,所以它總是認爲它有一個新的Key。
我嘗試使用文字字符串作爲關鍵也dId +' - '+ oId,我認爲應該工作。當它沒有時,我用hashCode()和equals()來嘗試對象,這似乎也不起作用。
也許值得注意的是,oId可能是一個字符串「5」或數字5.然而,我認爲,由於Javascript沒有強類型,這種差異應該不重要 - 特別是因爲,當與dId + ' - '它應該成爲一個字符串。
關於爲什麼比較似乎不起作用的任何想法? 在此先感謝
蒂姆 - 感謝您的及時回覆。我的用法如下 - > \t'var h1 = new Hashtable(); \t var h2 = new Hashtable(); var k1 = new Key(「d」,6),k2 = new Key(「d」,「6」); \t h1.put(k1,1); (k2,2); \t \t h2.each(功能(鍵,值){\t \t \t \t \t警報( 「H2具有 」+ key.hashCode()+「:」 + h2.containsKey(鍵)); \t \t});'但是這個用法也適用於這個例子。我會進一步調查。 – MTurner
蒂姆 - 我發現我的邏輯錯誤,導致我相信鍵比較。再次感謝! – MTurner