从数组中查找和删除元素

时间:2013-09-04 18:53:57

标签: javascript arrays

如果我有一个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,除非我纠正它。

5 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

就个人而言,我喜欢使用过滤方法的可重复使用功能:

//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]

答案 2 :(得分:1)

John Resig ,jQuery的创建者创建了一个非常方便的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);
    }
}

使用这样的代码删除特定值。

答案 3 :(得分: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);
    }
}

答案 4 :(得分:1)

我更喜欢做这样的事情:

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

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