所以我现在有一个多维数组,里面有一个由函数创建的荒谬数量的数组,在这个结构
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);
}
}
所以在第一个例子中,编号为9的位置在10000以上,所以它应该拼接/删除它的父节点。目前,这只是删除数组的一部分或什么也不删除。
任何想法?谢谢:)
在你的代码中
for (i = 0; i < comb.length; ++i) {
if (comb[i][9] > 10000) {
comb.splice([i],1);
}
}
删除一个元素,并将计数器加1。例如,你删除元素5,你的计数器上升到6,访问的元素现在是7,第6个元素没有被处理。
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
环在这里不起作用。
使用while,只在未拼接时增加。
var i = comb.length;
while (i--) {
if (comb[i][9] > 10000) {
comb.splice(i, 1);
}
}
在每个梳子上。拼接一个元素将从梳子数组和梳子中移除。长度将递减,这将导致意想不到的副作用,你的循环永远不会到达一些数组索引…
快速修复:
comb.splice(i,1, []); // Remove the array at that index and replace it with an empty one
适当的解决办法:您应该遵循@Terminus的建议