日々のアンテナ

日々アンテナを貼って、いろんな情報をキャッチ、発信したいと思います。
2017年10月 ≪  123456789101112131415161718192021222324252627282930 ≫ 2017年12月
TOPサイトのこと ≫ 配列からある要素を削除する

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

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

Comment

編集
こんにちは。
こんなに簡単だったとは!
なかなか削除がわからず苦労していました。
2006年10月17日(Tue) 19:02
編集
サクさんこんにちは。
ね、削除ってどうするんだろう・・・って悩んじゃいます。
配列の最初の値を削除(Array.shift())とか
配列の最後の値を削除(Array.pop())とかはすぐに見つかるんですけどね。
2006年10月19日(Thu) 10:10
編集
ためになりました。ありがとうございます。
ただ、サンプルコード、肝心のspliceが記述漏れになってます。myArray(1,2)って最初???でした。
2007年11月07日(Wed) 11:06
編集
通りすがりさん
コメントありがとうございます!(ちょうど覗いたときに追加されたので即お返事です。)
おお、ほんとに抜けてました。早速修正しました。
ありがとうございます。
2007年11月07日(Wed) 11:15
編集
役立ちました。ありがとうございます(^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
編集
kenさん
ありがとうございます!
確かに複数ある場合を考慮してませんでした。
複数の場合はkenさんの方法を使用するように本文から誘導させていただきますね。
2008年02月19日(Tue) 17:28
編集
調べてましたが連想配列には使えないっぽかったので他の方法を探しましたところ、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
編集
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












非公開コメントにする
Trackback

Trackback URL