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

您可以使用.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

就个人而言,我喜欢在 filter 方法中使用可重用的函数:

//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 回答
1

我更喜欢这样做:

removeEmail(event){
   myarray.splice(myarray.indexOf(event.target.id), 1)
}

myaraay.splice() 要删除,myarray.indexOf() 会给出要从数组中删除的数字或任何内容。这是最简单的方法,不需要循环。:)

于 2021-07-29T17:25:37.487 回答