我正在创建一个哈希表来检查一个四个字母的单词是否有效:
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。为什么会这样?
由于
答案 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
。