我刚刚经历了奇怪的事情,这是我实际使用的代码:For循环数组读取'remove'?
for (iter in data.List) {
console.log(iter);
}
正如你所期望的,日志应该给每一行的数字(0,1,2 ...) ,相反,它给了我这样的:
0
1
2
remove
知道了我的阵列只有3行
有没有人曾经encountred呢?
我刚刚经历了奇怪的事情,这是我实际使用的代码:For循环数组读取'remove'?
for (iter in data.List) {
console.log(iter);
}
正如你所期望的,日志应该给每一行的数字(0,1,2 ...) ,相反,它给了我这样的:
0
1
2
remove
知道了我的阵列只有3行
有没有人曾经encountred呢?
基本上,问题是你正在遍历你的数组使用for in
循环,这不意味着通过数组迭代。它的目的是遍历一个对象的所有属性,显然在你的数组上有一个名为remove
的属性。
有关为什么for in
对于阵列来说是个坏主意的更多细节,请参阅Why is using "for...in" with array iteration a bad idea?。
作为解决方案,我建议使用索引for
循环。这种类型的循环不关心属性,因此你很好。因此,它基本上可以归结为一个非常经典:
for (var i = 0; i < data.List; i++) {
console.log(data.List[i]);
}
顺便说一句:你不应该在JavaScript中大写任何东西,除非它是一个构造函数。因此它应该是data.list
。
PS:一个很好的阅读,当谈到阵列和(错误)使用它们,阅读Fun with JavaScript Arrays,一个很好的阅读。
是的,这就是for..in
如何在JavaScript中工作。它枚举了所有对象属性(不是数组索引)。简单的解决方案:不要在阵列上使用for..in
,因为这不是它的目的。
向我们显示创建您的列表的代码。 –
我建议不要使用'for in'作为数组(参见http://stackoverflow.com/questions/500504/why-is-using-for-in-with-array-iteration-such-a-bad-idea ) –
我建议阅读[关于'for ... in的MDN文档](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in) 。它告诉你问题是什么。 –