如何在javascript中从多维数组中删除数组?

时间:2015-09-18 15:12:21

标签: javascript arrays multidimensional-array splice

所以我现在有一个多维数组,里面有一个由函数创建的大量数组,在这个结构中

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,所以它应该拼接/删除它的父亲。 目前这只是删除部分数组或根本没有..

有什么想法吗?谢谢:))

2 个答案:

答案 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'提供的建议作为评论

相关问题