2011-09-04 78 views
0

我創建一個哈希表來檢查四個字母的單詞是否有效:爲什麼我的散列表包含虛假值?

function myClickHandler(myClickHandler) 
{ 
    var words4=new Array("abed", "abet", "able", "ably", "abut", "aces", "ache", "achy"); 

    // Initialise hash table 
    var wordhash = new Array(); 

    for (var i in words4) 
     { 
      wordhash[ words4[i] ] = true; 
     }; 

    var text = wordhash['10']; 
} 

然而,當我檢查哈希表在調試器的第一個元素似乎是:

wordhash['10'] = true 

所以我的測試函數中的最後一個語句將變量文本設置爲true。這是爲什麼發生?

感謝

回答

5

你正在做的一些事情不能完全正確:

  • 不要對數組使用for in
  • 使用鍵/值對,請使用object而不是array
  • 使用[]爲對象創建數組{}
  • A for循環不需要尾隨;

您可以將其更改爲:

var words4 = ["abed", "abet", "able", "ably", "abut", "aces", "ache", "achy"]; 

// Initialise hash table 
var wordhash = {}; 

for (var i = 0; i < words4.length; i++) { 
    wordhash[ words4[i] ] = true; 
} 

console.log(wordhash); 

我則得到記錄是什麼,我認爲你希望它是:

Object 
    abed: true 
    abet: true 
    able: true 
    ably: true 
    abut: true 
    aces: true 
    ache: true 
    achy: true 
+0

謝謝 - 在你的幫助下,我的程序正在運行;請參閱: http://www.plasticki.com/show?9EE。 我歡迎任何改進建議。 David – johnsondavies

+0

@johnsondavies:你的代碼確實很有趣。但是,我不會建議與'未定義'進行比較。看:'undefined = 1; var a;一個== undefined'會產生'false',因爲undefined不是真的* undefined。相反,使用'typeof something =='undefined''。一些常見的做法是使用'==='而不是'=='和'[]'來代替'new Array()'。 – pimvdb

3

遍歷數組這樣是不是好的做法,請嘗試檢查循環中的i的值。它會提供大量不需要的數據。

你最好通過使循環這樣的使用i作爲索引:

for (var i=0; i<words4.length; i++){ 
    wordhash[words4[i]] = true; 
} 

在這種情況下查詢wordhash['10']時,它會給undefined,並從第一陣列狀abed查詢什麼時候會給true