2016-06-29 6 views
0

長さがある値よりも小さい行をすべて削除します。私はこれを行うにはjavascriptでスプライス関数を使用しています。Javascriptのスプライス機能は、配列に空の行を4つ追加していますか?

for (var i = 0; i < table.length; i++) { 

    if (table[i].length<=6) { 
     table.splice(i, 1); 
    } 
} 

が、2つの長さを持つ行:0が先頭で、私の配列this is the actual array extra rows added after being spliced whisの最後に追加されているが、この起こっているのでしょうか? どうすればそれを取り除くことができますか?

+2

'テーブル[i]を.splice(0、I)'またはそれのような何か... – dandavis

+2

なぜだけではなく 'table.filter(機能(A){戻りa.length > 6;}); '? – Xufox

答えて

1

要素がスプライスされていると、次の要素が配列の前の場所に移動するため、最後からスプライスすることをお勧めします。

var table = [ 
 
     [0, 1, 2, 3, 4, 5], 
 
     [], 
 
     [0], 
 
     [], 
 
     [], 
 
     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13], 
 
     [0, 1, 2, 3, 4, 5, 6, 7], 
 
     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
 
     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
 
     [0, 1, 2, 3, 4, 5, 6, 7, 8], 
 
     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 
 
     [0], 
 
     [0], 
 
     [], 
 
     [], 
 
     [1] 
 
    ], 
 
    i = table.length; 
 

 
while (i--) { 
 
    if (table[i].length <= 6) { 
 
     table.splice(i, 1); 
 
    } 
 
} 
 

 
console.log(table);

0

これを試してみてください:

for (var i = 0; i < table.length; i++) { 

    if (table[i].length<=6) { 
     table.splice(i, 1); 
     i--; 
    } 
} 

あなたは、配列の要素は、貴重な除去によってシフトされているので、配列にインデックスを小さくする必要がある行を削除した後。

+1

forループ3番目のステートメントを削除し、一致しない場合は 'i - 'の必要がなくなるまで増やすことができます。またはforループで逆数を使用することもできます。 –

関連する問題