所以我现在有一个多维数组,里面有一个由函数创建的大量数组,在这个结构中
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 :(得分:2)
在您的代码中
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
循环在这里不起作用。
随着时间的推移,只有当它没有拼接时才会增加。
var i = comb.length;
while (i--) {
if (comb[i][9] > 10000) {
comb.splice(i, 1);
}
}
答案 1 :(得分:1)
在每个comb.splice上,一个元素将从梳形数组中移除,并且comb.length将减少,这将导致循环的意外副作用永远不会到达某些数组索引......
快速修复:
comb.splice(i,1, []); // Remove the array at that index and replace it with an empty one
正确修复: 您应该按照@Terminus'提供的建议作为评论