日々のアンテナ

ARTICLE PAGE

配列からある要素を削除する

JavascriptでArray.deleteって探してもないので、ちょっと途方にくれちゃうけど、 spliceを使えば簡単に配列から要素を削除できます。 (置換するメソッドを削除に使うなんて最初はなかなか気づきにくいですよね。)
Array.splice(開始番号,削除する要素数);
例: myArray = new Array("red", "green", "blue", "yellow"); myArray.splice(1,2); 結果: red,yellow 注意: インデックス番号は0からです。 応用: この中でgreenだけを削除したい場合
myArray = new Array("red", "green", "blue", "yellow");
for(i = 0; i < myArray.length; i++){
 if(myArray[i] == "green"){
  myArray.splice(i,1);
 }
}
で、結果はred,lue,yellowの配列になります。 2008/02/19追記: ただし上記の方法ですとgreenが二個あった場合に削除されずに残ってしまいます。 コメントでkenさんの記載してくださった方法を参照してくださいね。 http://javascript-memo.seesaa.net/article/24832361.html#comment

Comments 8

サク  

こんにちは。
こんなに簡単だったとは!
なかなか削除がわからず苦労していました。

2006/10/17 (Tue) 19:02 | EDIT | REPLY |   

じゅんこ  

サクさんこんにちは。
ね、削除ってどうするんだろう・・・って悩んじゃいます。
配列の最初の値を削除(Array.shift())とか
配列の最後の値を削除(Array.pop())とかはすぐに見つかるんですけどね。

2006/10/19 (Thu) 10:10 | EDIT | REPLY |   

通りがかり  

ためになりました。ありがとうございます。
ただ、サンプルコード、肝心のspliceが記述漏れになってます。myArray(1,2)って最初???でした。

2007/11/07 (Wed) 11:06 | EDIT | REPLY |   

じゅんこ  

通りすがりさん
コメントありがとうございます!(ちょうど覗いたときに追加されたので即お返事です。)
おお、ほんとに抜けてました。早速修正しました。
ありがとうございます。

2007/11/07 (Wed) 11:15 | EDIT | REPLY |   

ken  

役立ちました。ありがとうございます(^o^)
ただ、この例だと、"green"が連続で入っていた場合、削除漏れが発生します。(funcNG)
funcOK()の様に実装すると、削除漏れは発生しません。
function funcNG(){
myArray = new Array("red", "green", "green", "blue", "yellow");
for(i = 0; i < myArray.length; i++){
if(myArray[i] == "green"){
myArray.splice(i,1);
}
}

showArr(myArray);
}
function funcOK(){
myArray = new Array("red", "green", "green", "blue", "yellow");
var len = myArray.length - 1;
var i;
for(i = len; i >= 0; i--){
if(myArray[i] == "green"){
myArray.splice(i,1);
}
}

showArr(myArray);
}
function showArr(arr)
{
var t = '【結果】length:' + arr.length + '\n';
for(j = 0; j < arr.length; j++){
t += '[' + j + ']' + arr[j] + '\n';
}
alert(t);
}

2008/02/18 (Mon) 11:06 | EDIT | REPLY |   

じゅんこ  

kenさん
ありがとうございます!
確かに複数ある場合を考慮してませんでした。
複数の場合はkenさんの方法を使用するように本文から誘導させていただきますね。

2008/02/19 (Tue) 17:28 | EDIT | REPLY |   

ばくさい@通りすがり  

調べてましたが連想配列には使えないっぽかったので他の方法を探しましたところ、delete演算子なるものがあり、それで削除できるそうです。
知りませんでした・・・
http://typea.dip.jp/tips/wiki.cgi?page=JavaScript+%C7%DB%CE%F3%A4%CE%CD%D7%C1%C7%A4%F2%BA%EF%BD%FC

2008/02/23 (Sat) 17:16 | EDIT | REPLY |   

あり  

myArray = new Array("red","green","green", "blue", "yellow","green");
for(i = 0; i < myArray.length; i++){
alert('今から判定:'+myArray[i]);
if(myArray[i] == "green"){
alert('HIT:'+myArray[i]);
myArray.splice(i,1);
i=i-1;//←これいれれば全部消せるっぽい
alert('消した分戻って:'+myArray[i]);
}
}
alert('おしまい\n'+myArray.join('\n'));

2010/06/15 (Tue) 12:38 | EDIT | REPLY |   

Leave a reply