0

我可以通过输入索引的数值来使用它来检索值,如下所示:

Object.keys(myHash)[0]

,但是如果我使用变量来访问下面的内容,结果总是未定义的。有谁知道为什么会这样?

Object.keys(myHash)[indexVariable]

这是另一个例子:

function compute() {
var hashmap= new Array(); 
hashmap['a']=14;
hashmap['b']=2;
hashmap['c']=3;
hashmap['d']=4;
hashmap['e']=5;
hashmap['f']=6;
hashmap['g']=7;
hashmap['h']=8;
for (var each in hashmap){
    console.log(Object.keys(hashmap)[each]);
}

}

4

2 回答 2

0

您的示例无法正常工作,数组不应该具有自定义键。改为使用对象

var hashmap = {
    a: 14,
    b: 2,
    c: 3,
    d: 4,
    e: 5,
    f: 6,
    g: 7,
    h: 8
}

[编辑] 并且没有必要使用for .. in,Object.keysArray.prototype.forEach():

Object.keys(hashmap).forEach(function(i, e) {
    console.log(hashmap[i]);
});
于 2013-10-12T21:59:49.897 回答
0

Object.keys()只是一个键名数组- 您不能直接使用它来访问原始对象的元素。

尽管您应该声明hashmap为 anObject而不是 an ,但除非您确实想要对象自己的(可枚举)属性的名称,否则Array无需使用。Object.keys您的for ... in循环也可以正常工作:

for (var each in hashmap) {
    console.log(hashmap[each]);
}

唯一额外的使用Object.keys()是保证你不会遍历从原型继承的键,但你也可以复制它:

for (var each in hashmap) {
    if (hashmap.hasOwnProperty(each)) {
        console.log(hashmap[each]);
    }
}
于 2013-10-12T21:59:53.530 回答