読者です 読者をやめる 読者になる 読者になる

peko’s Hatena Blog

ルールを守ってアクセルシンクロォォォ!!!

JavaScript配列の削除

プログラム-javascript プログラム

deletespliceを利用する事で削除可能ですが、spliceで思わぬハマり…

deleteは要素の値のみ削除し要素数に変化はない(要素値は代わりにundefinedになる。エラーハンドリングがめんどい)

spliceは指定個所から指定個数の要素を削除できる。(本来は置換するメソッド)

上記と違い、値のみでなく要素そのものを削除するので要素数も減ります。

そのためfor分で判定して削除する際に同じ項目が複数個続くと削除漏れが発生!

for分の繰り返し処理で配列の要素数が減ったのに、変数「i」がインクリメントされるためです。

結論として対応は削除を行った際に可変数「i」をデクリメントすれば良いだけ。

var sis_array = ['mi1','mi2','mi6','mi6','mi3', 'mi1','mi6'];
for( var i = 0 , sis_max = sis_array.length ; i < sis_max ; i++ ){
    if( sis_array[i] == "mi6" ){
        //spliceメソッドで要素を削除しiをデクリメントする
        sis_array.splice(i--, 1);
    }
}

mi1,mi2,mi3,mi1出力結果配下の様になる。

きちんと検証してなかったけどこうなっているのね。