配列から値で判別して要素を削除する
wrote :
配列の「値」で判別して要素を削除する場合、 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メソッドは機能しないので別対応が必要になります。
