为什么我的哈希表包含虚假值?

时间:2011-09-04 10:28:55

标签: javascript

我正在创建一个哈希表来检查一个四个字母的单词是否有效:

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

所以我的测试函数中的最后一个语句将变量text设置为true。为什么会这样?

由于

2 个答案:

答案 0 :(得分:5)

你做了一些不完全正确的事情:

  • 请勿将for in用于数组。
  • 使用键/值对,使用object,而不是array
  • 使用[]为对象创建数组{}
  • 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

答案 1 :(得分:3)

迭代这样的数组不是一个好习惯,请尝试检查循环中i的值。它会提供大量不需要的数据。

最好通过这样的循环使用i作为索引:

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

在这种情况下,当查询wordhash['10']时,它会提供undefined,当查询第一个数组中的任何内容时,如abed,它会给true