我有一个这样的数组:var y = [1,2,3];

我想从数组y中移除2。

如何使用jQuery从数组中删除一个特定的值?我尝试过pop(),但它总是删除最后一个元素。


当前回答

只是把Sarfraz的答案加上去,很惊讶没有人把它变成一个函数。

如果在数组中不止一次有相同的值,则使用.filter方法使用ddagsan的答案。

函数arrayremovevalue(数组,removeValue){ var newArray = jQuery。grep(数组,函数(值){返回值!= removeValue;}); 返回newArray; } var promoItems = [1,2,3,4]; promoItems = arrayremoveeval (promoItems, 3) console.log (promoItems); promoItems = arrayremoveeval (promoItems, 3);//不移除任何东西 console.log (promoItems); < script src = " https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js " > < /脚本>

其他回答

Filter方法在vanilla js中很有用。这可用于Array对象。

var arr = [1, 2, 3, 4, 5, 5];

var result = arr.filter(function(elem){
   return elem != 5; 
});//result -> [1,2,3,4]

http://jsfiddle.net/emrefatih47/ar0dhvhw/

所以,在Ecmascript 6:

let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);

https://jsfiddle.net/emrefatih47/nnn3c2fo/

不是jQuery的方式,但是… 为什么不用更简单的方法呢?从下面的数组中删除'c'

var a = ['a','b','c','d']
a.splice(a.indexOf('c'),1);
>["c"]
a
["a", "b", "d"]

你也可以使用:(给自己的提示:不要修改你不拥有的对象)

Array.prototype.remove = function(v) { this.splice(this.indexOf(v) == -1 ? this.length : this.indexOf(v), 1); }
var a = ['a','b','c'];
a.remove('c'); //value of "a" is now ['a','b']

添加是simplera.push('c')

你可以像这样使用.not函数:

var arr = [ 1 , 2 , 3 , 5 , 8];
var searchValue = 2;

var newArr = $(arr).not([searchValue]).get();

我有一个类似的任务,我需要根据数组中对象的属性一次性删除多个对象。

所以经过几次迭代后,我最终得到:

list = $.grep(list, function (o) { return !o.IsDeleted });

第二个获得最多好评的答案是OP想要的预期行为的一行jQuery方法,但他们在代码的末尾出错了,而且它有一个缺陷。如果要删除的项实际上不在数组中,则最后一项将被删除。

一些人已经注意到了这个问题,一些人已经提供了防止这种情况发生的循环方法。我提供了我所能找到的最短、最干净的方法,并在他们的答案下评论了根据这个方法修复代码的方法。

var x = [1, 2, "bye", 3, 4];
var y = [1, 2, 3, 4];
var removeItem = "bye";

// Removing an item that exists in array
x.splice( $.inArray(removeItem,x), $.inArray(removeItem,x) ); // This is the one-liner used

// Removing an item that DOESN'T exist in array
y.splice( $.inArray(removeItem,y), $.inArray(removeItem,y) ); // Same usage, different array

// OUTPUT -- both cases are expected to be [1,2,3,4]
alert(x + '\n' + y);

数组x将很容易地删除元素“bye”,而数组y将保持不变。

使用参数$. inarray (removeItem,array)作为第二个参数实际上最终是要拼接的长度。由于没有找到该项,因此计算结果为array.splice(-1,-1);,这将导致没有任何内容被拼接…所有这些都不需要为此写一个循环。