使用Object.keys()获取字典的键

时间:2013-10-12 21:50:40

标签: javascript

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

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]);
}

}

2 个答案:

答案 0 :(得分:0)

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

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

[edit]并且无需使用for .. in,与Object.keys结合使用Array.prototype.forEach()

Object.keys(hashmap).forEach(function(i, e) {
    console.log(hashmap[i]);
});

答案 1 :(得分:0)

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

尽管您应该将hashmap声明为Object而不是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]);
    }
}