2012-02-15 18 views
16

removeAll()関数を作成しようとしていますが、その特定の値(インデックスではない)の配列のすべての要素が削除されます。配列の複数の項目を値で削除するにはどうすればよいですか?

私たちがループを変更すると、インデックスが動きやすくなります(私たちが望むように動作させるのが非常に困難になります)。そして、変更するたびにループを再起動するのは非常に非効率的です。大きなアレイ。しかし、

var myarray = [0, 1, 2, 3, 4]; 
var tofind = 2; 

var stored_index = arrFind(tofind, myarray); 
if (stored_index != -1) { 
    myarray.splice(stored_index, 1); 
} 

alert(myarray.join(",")); //0,1,3,4 

:このような要素を削除するのは簡単です

function arrFind(val, arr) { 
    for (var i = 0, len = arr.length, rtn = -1; i < len; i++) { 
     if (arr[i] === val) { 
      return i; 
     } 
    } 
    return -1; 
} 

はこれまでのところ、私は、それはこのようになります(古いIEのサポートのために)私自身のarr.indexOf機能を書きました私が先に指摘したように、ループしている間にこれを行うとき、私たちは困ってしまいます。

ループ処理中に配列アイテムを適切に削除する方法については、どのようなアイデアですか?

+0

(loop_を_insideが、私の質問は_aのproblem_程度であるため、_multiple_の項目を削除するとき_not_ DUPである)(http://stackoverflow.com/q/3954438/908879)[この関連する質問を見つけました] – ajax333221

答えて

42

ループを逆順に実行するか、削除しないアイテムで新しい配列を作成します。

+0

建物私が削除したいアイテムの '!='であるアイテムだけを持つ新しい配列は良いアイデアです!、私はこれを行います。 – ajax333221

+10

'逆順でループする ' - * facepalm * - ありがとう! –

+0

あなたは主人公です! – svarog

22

すべての新しいブラウザは、Arrayフィルタ方式があります。

var myarray=[0,1,2,3,4]; 
var removal=2; 
var newarray=myarray.filter(function(itm){return itm!==removal}); 
1

私はARRはあなたが削除したい値D2元の配列とD1、であるこの小さな機能を書きました。私はそれがどのように削除されるべき任意の数の値に一般化できるのだろうか。まあ、私は初心者です。

function destroyer(arr, d1, d2) { 
    var lean =[]; 
    for (var i = 0; i<arr.length; i++) { 
     if (arr[i] != d1 && arr[i] != d2) { 
      lean.push(arr[i]); 
     } 
    } 
    return lean; 
4

これを試してみてください。削除したい番号のインデックスを確認するだけです。あなたの配列に追加の要素を追加しました。

var myarray = [0, 1, 2, 3, 2, 2, 2, 5, 6]; 
var indicesToRemove = new Array(); 

for(i=0;i<myarray.length;i++){ 
    if(myarray[i]===2){ //let's say u wud like to remove all 2 
     indicesToRemove.push(i); //getting the indices and pushing it in a new array 
    } 
} 

for (var j = indicesToRemove.length -1; j >= 0; j--){ 
    myarray.splice(indicesToRemove[j],1); 
} 

alert(JSON.stringify(myarray)); //myarray will be [0,1,3,5,6] 
+1

この回答は、コードを持ち、実際に削除の順序を保持するため、受け入れられたものより優れています。 –

関連する問題