2015-09-18 88 views
0

所以我现在有与由函数内部创建的阵列的荒谬量的多维数组,在该结构如何从javascript中的多维数组中删除数组?

0: Array[10] 
    0: Array[5] 
    1: Array[5] 
    2: Array[5] 
    3: Array[5] 
    4: Array[5] 
    5: Array[5] 
    6: Array[5] 
    7: Array[5] 
    8: 335.74 
    9: 10341 
1: Array[10] 
2: Array[10] 
3: Array[10] 
.... and so on. 

因为创建此阵列的功能是计算的8个阵列的所有可能的组合的函数(最后2个是后面追加)数组非常长,所以我想过滤一些他们。这里我试图删除所有在最后一个元素上的值大于10000的数组,如果它删除了它的整个数组。

for (i = 0; i < comb.length; ++i) { 
    if (comb[i][9] > 10000) { 
     comb.splice([i],1); 
    } 
} 

所以在第一个例子中,点nr。 9在10000以上,所以它应该拼接/删除它的父母。 目前这只是删除部分阵列或根本没有任何东西..

任何想法?谢谢:)

+0

为了得到我的上一个提供我将删除的评论。 [查看此答案并适用于您的问题](http://stackoverflow.com/questions/9882284/looping-through-array-and-removing-items-without-breaking-for-loop) – Terminus

回答

2

在你的代码

for (i = 0; i < comb.length; ++i) { 
    if (comb[i][9] > 10000) { 
     comb.splice([i],1); 
    } 
} 

你删除一个元素,并通过一个增加计数器。例如,你删除元素5,你的计数器上升到6,被访问的元素现在是7,第六个元素不被处理。

  5   counter i 
0 1 2 3 4 5 6 7 8 9 array elements 
      5   delete element 
0 1 2 3 4 6 7 8 9 array elements 
      6  counter i 
0 1 2 3 4 6 7 8 9 array elements 

因此,具有固定间隔的for循环在此处不起作用。

只是一起去,只有当它没有拼接时才增加。

var i = comb.length; 
while (i--) { 
    if (comb[i][9] > 10000) { 
     comb.splice(i, 1); 
    } 
} 
+1

正如@Terminus指出的那样更少的代码应该只是反转while的条件,从数组末尾循环到0 ... – Filip

1

在每个comb.splice元素将从梳阵列被删除,comb.length将减少,这将导致你的循环意想不到的副作用永远无法到达一些数组索引...

快速修复:

comb.splice(i,1, []); // Remove the array at that index and replace it with an empty one 

正确的解决办法: 您应该遵循@Terminus'意见,评论