如何在Javascript循环中遍历一个非线性的对象

时间:2015-05-06 10:04:53

标签: javascript object

我有一个结构如下的对象:

group[0] = [Object {code: 1}, {code: 2}, {... and so on}]
group[1] = [Object {code: 3}, {code: 4}, {... and so on}]
group[2] = [Object {code: 3}, {code: 4}, {... and so on}]
group[3] = [Object {code: 3}, {code: 4}, {... and so on}]
group[4] = [Object {code: 3}, {code: 4}, {... and so on}]

在案例1中:我的group.length给了我5,我可以遍历为

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

但如果我删除任何特定条目,说第二个,那么结构变为

group[0] = [Object {code: 1}, {code: 2}, {... and so on}]
group[2] = [Object {code: 3}, {code: 4}, {... and so on}]
group[3] = [Object {code: 3}, {code: 4}, {... and so on}]
group[4] = [Object {code: 3}, {code: 4}, {... and so on}]

由于某些限制,我无法更改其他组的数量,现在我的group.length为4,所以如果我放置一个for循环,它会为组[1]情况提供错误,因为它变得未定义。

请给我一个解决方案,以便我可以绕过未定义的值

4 个答案:

答案 0 :(得分:1)

问题是当您从数组中删除元素时,正在重新评估group.length。这样做:

group_length = group.length
for(i=0;i<group_length; i++) {}

编辑:这假定您要从循环内删除数组中的元素。如果没有,那就无视了。

答案 1 :(得分:1)

问题可能在于您是如何删除条目的。请尝试使用splice命令,因此group.splice(x, 1)其中x是要删除的元素。

然后group.length将调整为数组的新大小。

修改 因此,考虑到评论中的反馈,如何处理

for(i=0;i<group.length; i++) {
  if(!group[i]) {
    continue;
  }
  //do stuff here
}

答案 2 :(得分:0)

伙计我最后不得不添加一个计数器并在不删除我的条目的情况下解决它。 感谢您的帮助

答案 3 :(得分:-1)

一种可能的解决方案,

for(i in group){  // i will return only valid indexes.
    console.log(group[i]);
}

JSFiddle