我如何从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);
    }
}

所以在第一个例子中,编号为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的建议

相关内容

  • 没有找到相关文章

最新更新