配列の「値」で判別して要素を削除する場合、 spliceメソッドやsliceメソッドでは「値」ではなく「何番目」かでの処理をするためできない。shiftメソッドやpopメソッドは論外である。
filterメソッド
たとえば、[18, 9, 15, 9, 9, 5, 4, 1, 11] という配列から、要素の値が「9」もしくは「4」を削除する場合、filterメソッドを使います。
var sample = [18, 9, 15, 9, 9, 5, 4, 1, 11]; var del_sample = [9, 4]; sample = ary_delete(sample, del_sample); // 実行結果 [18, 15, 5, 1, 11];
/** * 配列の削除(値で判別) * 第一引数:ary 削除前の配列 * 第二引数:del_ary aryから削除する配列 */ function ary_delete(ary, del_ary) { ary = ary.filter(function(v){ var check = true; for (var i in del_ary) { if (v == del_ary[i]) { check = false; break; } } return check; }); return ary; }
注意事項
filterメソッドは、JavaScript 1.6以降で対応可能となるそうです。最近のモダンブラウザでは問題ないですが、たとえばIE8以下がターゲットブラウザに含まれる場合は、filterメソッドは機能しないので別対応が必要になります。