0

我有一个对象列表(data),我正在这样做:

for (var i = 0; data.length < i; i++) {...}

但它不起作用。当我使用这个时:

for (var i in data) {

它可以工作,但是当只有一个对象时循环了三次,在这种情况下i是:(0正确),indexOfObject(wtf),removeItem(wtf)。

为什么我的第一个表达式不起作用?那两个奇怪的i值是什么?难道我做错了什么?

编辑:由于这件事有点复杂,我能做的最好的就是提供我的数据对象的屏幕截图:screenshot

4

3 回答 3

4

检查你的for循环语句,循环(data.length < i)的条件是相反的,可能永远不会满足。

它应该是:

   for (var i = 0; i < data.length;  i++)
   {
      // Now write your code 
   }
于 2013-03-24T19:20:21.713 回答
1

如果你真的有一个数组——

var a = ["hello", "world"];

或者

var a = new Array();
a[0] = "hello";
a[1] = "world";

那么你的第一个循环(带有索引变量)是正确的。您应该使用in样式for循环来迭代对象的属性,而使用索引样式来迭代数组的数字索引属性。

编辑——哎呀,好叫@Sachin——你的for循环测试是倒退的。

如果你有一个普通的对象并且你想遍历它的属性,但是跳过对象原型链上的属性,你可以这样做:

for (var name in obj) {
  if (obj.hasOwnProperty(name)) {
    var value = obj[name];
    // do stuff
  }
}
于 2013-03-24T19:20:08.710 回答
0

我可以从上面给出的代码中看到,你在 for 循环中给出了错误的条件。首先,您将变量 i 初始化为 0,然后检查 data.length<0。任何长度值都可以小于零吗?

你可以像这样使用它:-

  for (var i = 0; i<data.length; i++) {...}

试试吧。

于 2013-03-24T19:24:43.197 回答