在Javascript中迭代由字符串索引的数组
我有一个数组,其中使用字符串作为数组的索引。假设我有:在Javascript中迭代由字符串索引的数组,javascript,Javascript,我有一个数组,其中使用字符串作为数组的索引。假设我有: var array = []; array["a"] = 1; array["b"] = 2; array["c"] = 33; 如何在“array”中迭代以显示其所有元素?具有字符串索引的“array”在JS中根本不是数组,而是具有属性的对象。你想要: var obj = { a:1, b:2, c:33 }; for (var prop in obj){ //this iterates over the prope
var array = [];
array["a"] = 1;
array["b"] = 2;
array["c"] = 33;
如何在“array”中迭代以显示其所有元素?具有字符串索引的“array”在JS中根本不是数组,而是具有属性的对象。你想要:
var obj = {
a:1,
b:2,
c:33
};
for (var prop in obj){
//this iterates over the properties of obj,
//and you can then access the values with obj[prop]
if (obj.hasOwnProperty(prop)) {
doSomething(obj[prop]);
}
}
数组只有可以解析为整数的索引。JS中的数组只能有顺序数字键,但对象可以有字符串作为键。由于键不是有序的,因此不能对其本身进行迭代,但可以显示所有元素:
var obj = {};
obj['a'] = 1;
obj['b'] = 2;
/* alternatively */ var obj = {'a': 1, 'b': 2};
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
//access via `obj[key]`
}
}
这不是一个真正的数组,至少不是你所期望的…一个对象就是你所需要的
var o={a:1,b:2,c:3}
,然后for..in
循环。我更喜欢使用Object.prototype.hasOwnProperty.call(obj,key)
,所以我不需要担心有人使用'hasOwnProperty
作为键并隐藏方法。@missingno为什么有人会这样做??如果for循环在对象的键上,为什么需要检查hasOwnProperty?@ExplosionPills:密钥名可能来自外部源。这只是一些防御性编程。@scott.korin:在本例中不是,但如果它是一个原型中包含方法的对象,它会阻止方法显示为属性。谢谢!非常有用的答案!