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
こんなに簡単だったとは!
なかなか削除がわからず苦労していました。
ね、削除ってどうするんだろう・・・って悩んじゃいます。
配列の最初の値を削除(Array.shift())とか
配列の最後の値を削除(Array.pop())とかはすぐに見つかるんですけどね。
ただ、サンプルコード、肝心のspliceが記述漏れになってます。myArray(1,2)って最初???でした。
コメントありがとうございます!(ちょうど覗いたときに追加されたので即お返事です。)
おお、ほんとに抜けてました。早速修正しました。
ありがとうございます。
ただ、この例だと、"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);
}
ありがとうございます!
確かに複数ある場合を考慮してませんでした。
複数の場合はkenさんの方法を使用するように本文から誘導させていただきますね。
知りませんでした・・・
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
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'));
ありがとうございます!
なるほどー。
一致した場合はデクリメントすればいいのですね!