4

数字のJavaScript配列がある場合

[1, 2, 5, 7, 5, 4, 7, 9, 2, 4, 1]

そして、その配列を検索して、4のような特定の数字を削除したい

[1, 2, 5, 7, 5, 7, 9, 2, 1]

それを行う最善の方法は何ですか

似てるかもと思ってた

for(var i = 0; i < myarray.length; i++) {
    if(myarray[i] == 4) {
        myarray.remove(i)
    }
}

しかしremove、配列には機能がありません。iまた、配列から要素を削除すると、修正しない限り台無しになります。

4

5 に答える 5

7

配列から 1 つまたは複数の項目を削除するために使用できます.splice()。配列の後ろから前に反復する場合、項目を削除してもインデックス作成が混乱することはありません。

var arr = [1, 2, 5, 7, 5, 4, 7, 9, 2, 4, 1];
for (var i = arr.length - 1; i >= 0; i--) {
    if (arr[i] == 4) {
        arr.splice(i, 1);
    }
}
于 2013-09-04T18:59:36.617 に答える
6

個人的には、フィルター メソッドで再利用可能な関数を使用するのが好きです。

//generic filter:
function without(a){return this!=a;}


//your data:
var r= [1, 2, 5, 7, 5, 4, 7, 9, 2, 4, 1];

//your data filtered against 4:
var no4=r.filter(without, 4);

//verify no 4s:
alert(no4); //shows: "1,2,5,7,5,7,9,2,1"

これで元の配列を変更したい場合は、新しい値を消去して古い配列にプッシュするだけです。

 function without(a){return this!=a;}
 var r= [1, 2, 5, 7, 5, 4, 7, 9, 2, 4, 1],  //orig
    r2=r.slice(); //copy
 r.length=0; //wipe orig
 [].push.apply( r, r2.filter(without, 4)); //populate orig with filtered copy
 r; // == [1, 2, 5, 7, 5, 7, 9, 2, 1]
于 2013-09-04T19:00:15.397 に答える
1

jQuery の作成者であるJohn Resigは、非常に便利な Array.remove メソッドを作成しました。これをプロジェクトで常に使用しています。

// Array Remove - By John Resig (MIT Licensed)
    Array.prototype.remove = function(from, to) {
      var rest = this.slice((to || from) + 1 || this.length);
      this.length = from < 0 ? this.length + from : from;
      return this.push.apply(this, rest);
    };

したがって、次のようにコードを使用できます。

// Remove the second item from the array
myarray.remove(1);
// Remove the second-to-last item from the array
myarray.remove(-2);
// Remove the second and third items from the array
myarray.remove(1,2);
// Remove the last and second-to-last items from the array
myarray.remove(-2,-1);

- -編集 - -

for(var i = 0; i < myarray.length; i++) {
    if(myarray[i] == 4) {
        myarray.remove(i);
    }
}

このようなコードを使用して、特定の値を削除します。

于 2013-09-04T19:03:22.387 に答える
1

これは、インデックスに基づく削除機能です

function  remove(array, index){
     for (var i = index; i < arr.length-1; i++) {
          array[i] = array[i+1];    
      }
}

基本的に、これが行うことは、すべての要素をインデックスから「左」にシフトすることです。スプライスがどのように機能するかはよくわかりませんが、まったく同じように機能すると思います。

その関数をコードに追加した後は、あとは実行するだけです。

for(var i = 0; i < myarray.length; i++) {
    if(myarray[i] == 4) {
       remove(myarray,i);
    }
}
于 2013-09-04T19:12:21.907 に答える