Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Javascript中迭代由字符串索引的数组_Javascript - Fatal编程技术网

在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:在本例中不是,但如果它是一个原型中包含方法的对象,它会阻止方法显示为属性。谢谢!非常有用的答案!