/ Como posso remover um array de um array multidimensional em javascript? - javascript, matrizes, array multidimensional, splice

Como posso remover um array de um array multidimensional em javascript? - javascript, matrizes, array multidimensional, splice

Então eu atualmente tenho uma matriz multidimensional com uma quantidade ridícula de matrizes dentro criado por uma função, nesta estrutura

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.

desde que a função que cria esta matriz é umfunção que calcula todas as combinações possíveis dos 8 arrays que estão dentro (os 2 últimos são adicionados posteriormente) a matriz é muito longa, então eu gostaria de filtrar alguns deles para fora. Aqui estou tentando remover todos os arrays que tem um valor acima de 10000 no último elemento, se ele remover todo o seu array.

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

Assim, no primeiro exemplo, o ponto nr. 9 está acima de 10000, então ele deve emendar / remover seu pai. Atualmente isso apenas remove partes da matriz ou nada.

Alguma ideia? Obrigado :)

Respostas:

2 para resposta № 1

No seu código

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

você apaga um elemento e aumenta o contador em um. Assim, por exemplo, você exclui o elemento 5 e seu contador vai até 6, o elemento acessado agora é 7 e o 6º elemento não é processado.

          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

Portanto, o for loop com intervalo fixo não está funcionando aqui.

Basta ir com o tempo e aumentar apenas quando não foi emendado.

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

1 para resposta № 2

Em cada pente.splice um elemento será removido da matriz pente e o comb.length será decrementado, o que levará ao efeito colateral inesperado de seu loop para nunca atingir alguns índices de array ...

Conserto rápido:

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

Correção adequada: Você deve seguir @Terminus " conselho fornecido como comentário