我可以通过输入索引的数值来使用它来检索值,如下所示:
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]);
}
}
答案 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]);
}
}