こんな場合はこの記事を見てね!
そのものずばり!の内容じゃなくてもヒントになるはずです♪
ファイルをアップロードしようと思ったら「アクセスが拒否されました」
ウインドウをリサイズ、移動しようとしたら「アクセスが拒否されました」
form部品の初期値を取得したい、初期値に戻したい
form部品すべてにアクセスしたい
配列の値を削除したい
配列の値を並び替えたい
javascriptでtry-catch!
IEでclass名を取得したい
IEでonclick属性をセットしたい

2006年10月03日

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

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
タグ:javascript

ちょっと使えるぞ♪と思ったらクリックして頂くと励みになります。ビジネスブログ100選
posted by junko at 18:15 | Comment(9) | TrackBack(0) | 配列(Array)
この記事へのコメント
こんにちは。
こんなに簡単だったとは!
なかなか削除がわからず苦労していました。
Posted by サク at 2006年10月17日 19:02
サクさんこんにちは。

ね、削除ってどうするんだろう・・・って悩んじゃいます。
配列の最初の値を削除(Array.shift())とか
配列の最後の値を削除(Array.pop())とかはすぐに見つかるんですけどね。
Posted by じゅんこ at 2006年10月19日 10:10
ためになりました。ありがとうございます。
ただ、サンプルコード、肝心のspliceが記述漏れになってます。myArray(1,2)って最初???でした。
Posted by 通りがかり at 2007年11月07日 11:06
通りすがりさん

コメントありがとうございます!(ちょうど覗いたときに追加されたので即お返事です。)
おお、ほんとに抜けてました。早速修正しました。
ありがとうございます。
Posted by じゅんこ at 2007年11月07日 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);
}
Posted by ken at 2008年02月18日 11:06
kenさん

ありがとうございます!
確かに複数ある場合を考慮してませんでした。
複数の場合はkenさんの方法を使用するように本文から誘導させていただきますね。
Posted by じゅんこ at 2008年02月19日 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
Posted by ばくさい@通りすがり at 2008年02月23日 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'));
Posted by あり at 2010年06月15日 12:38
あり さん
ありがとうございます!
なるほどー。
一致した場合はデクリメントすればいいのですね!
Posted by じゅんこ at 2012年01月31日 16:56
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。