如何使用jQuery从数组中删除特定的值

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

我想从数组y删除2

我怎样才能使用jQuery从数组中删除特定的值? 我试过pop()但总是删除最后一个元素。

一个工作的JSFIDDLE

你可以做这样的事情:

 var y = [1, 2, 2, 3, 2] var removeItem = 2; y = jQuery.grep(y, function(value) { return value != removeItem; }); 

结果:

 [1, 3] 

http://snipplr.com/view/14381/remove-item-from-array-with-jquery/

有了jQuery,你可以像这样做一个单行操作:

例如: http : //jsfiddle.net/HWKQY/

 y.splice( $.inArray(removeItem, y), 1 ); 

使用本机.splice()和jQuery的$.inArray()

你可以使用underscore.js 。 这真的让事情变得简单。

在你的情况下,你必须正确的代码是 –

 _.without([1,2,3], 2); 

结果是[1,3]。

它减less了你写的代码。

jQuery.filter方法很有用。 这可用于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'] 

添加更简单a.push('c')

 //This prototype function allows you to remove even array from array Array.prototype.remove = function(x) { var i; for(i in this){ if(this[i].toString() == x.toString()){ this.splice(i,1) } } } 

使用示例

 var arr = [1,2,[1,1], 'abc']; arr.remove([1,1]); console.log(arr) //[1, 2, 'abc'] var arr = [1,2,[1,1], 'abc']; arr.remove(1); console.log(arr) //[2, [1,1], 'abc'] var arr = [1,2,[1,1], 'abc']; arr.remove('abc'); console.log(arr) //[1, 2, [1,1]] 

要使用这个原型函数,你需要把它粘贴到你的代码中。 然后你可以用'点符号'把它应用到任何数组:

 someArr.remove('elem1') 

删除数组中的项目

 var arr = ["jQuery", "JavaScript", "HTML", "Ajax", "Css"]; var itemtoRemove = "HTML"; arr.splice($.inArray(itemtoRemove, arr), 1); 

在Javascript中没有原生的方法。 你可以使用库或写一个小函数来做到这一点: http : //ejohn.org/blog/javascript-array-remove/

你可以使用.not这样的function:

 var arr = [ 1 , 2 , 3 , 5 , 8]; var searchValue = 2; var newArr = $(arr).not([searchValue]).get(); 
 //in case somebody needs something like this: multidimensional array (two items) var ar = [[0,'a'],[1,'b'],[2,'c'],[3,'d'],[4,'e'],[5,'f']]; var removeItem = 3; ar = jQuery.grep(ar, function(n) { return n[0] != removeItem; //or n[1] for second item in two item array }); ar; 

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

所以经过几次迭代后,我最终得出结论:

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

我会用pick_and_remove()函数扩展Array类,如下所示:

 var ArrayInstanceExtensions = { pick_and_remove: function(index){ var picked_element = this[index]; this.splice(index,1); return picked_element; } }; $.extend(Array.prototype, ArrayInstanceExtensions); 

虽然看起来有点冗长,但现在可以在任何你想要的数组上调用pick_and_remove()

用法:

 array = [4,5,6] //=> [4,5,6] array.pick_and_remove(1); //=> 5 array; //=> [4,6] 

你可以在这里看到所有这些以口袋妖怪为主题的动作。

有一个简单的拼接解决scheme。 根据W3School拼接的语法如下;

 array.splice(index, howmany, item1, ....., itemX) 

index必需。 指定在哪个位置添加/移除项目的整数,使用负值指定数组末尾的位置

howmany必需。 要删除的项目数量。 如果设置为0,则不会删除任何项目

item1,…,itemX可选。 要添加到数组中的新项目

请记住,下面的js会popup给定数组中的一个或多个匹配的项目,否则将不会删除数组的最后一个项目。

 var x = [1,2,3,4,5,4,4,6,7]; var item = 4; var startItemIndex = $.inArray(item, x); var itemsFound = x.filter(function(elem){ return elem == item; }).length; 

要么

 var itemsFound = $.grep(x, function (elem) { return elem == item; }).length; 

所以决赛应该如下所示

 x.splice( startItemIndex , itemsFound ); 

希望这可以帮助。

 /** SUBTRACT ARRAYS **/ function subtractarrays(array1, array2){ var difference = []; for( var i = 0; i < array1.length; i++ ) { if( $.inArray( array1[i], array2 ) == -1 ) { difference.push(array1[i]); } } return difference; } 

然后你可以调用代码中的任何地方的函数。

 var I_like = ["love", "sex", "food"]; var she_likes = ["love", "food"]; alert( "what I like and she does't like is: " + subtractarrays( I_like, she_likes ) ); //returns "Naughty :P"! 

这在所有情况下都可以工作,并且避免了上述方法中的问题。 希望有所帮助!

我的版本user113716的答案。 如果找不到匹配,他将删除一个值,这是不好的。

 var y = [1, 2, 3] var removeItem = 2; var i = $.inArray(removeItem,y) if (i >= 0){ y.splice(i, 1); } alert(y); 

现在,如果find匹配,则删除1个项目,如果找不到匹配,则删除0个项目。

怎么运行的:

  • $ .inArray(value,array)是一个jQuery函数,用于查找数组中的第一个索引value
  • 如果找不到该值,则返回-1,因此请在删除之前检查我是否是有效的索引。 删除索引-1意味着删除最后一个,这在这里没有帮助。
  • .splice(index,count)删除从index开始的值的count数值,所以我们只需要count 1

使用vanilla JavaScript安全地从数组中删除2:

 // Define polyfill for browsers that don't natively support Array.indexOf() if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(searchElement, fromIndex) { var k; if (this===null) { throw new TypeError('"this" is null or not defined'); } var O = Object(this), len = O.length >>> 0; if (len===0) return -1; var n = +fromIndex || 0; if (Math.abs(n)===Infinity) n = 0; if (n >= len) return -1; k = Math.max(n >= 0 ? n : len - Math.abs(n), 0); while (k < len) { if (k in O && O[k]===searchElement) return k; ++k; } return -1; }; } // Remove first instance of 2 from array if (y.indexOf(2) > -1) { y.splice(y.indexOf(2), 1); } /* To remove all instances of 2 from array, change 'if' to 'while': while (y.indexOf(2) > -1) { y.splice(y.indexOf(2), 1); } */ console.log(y); // Returns [1, 3] 

Polyfill来源: Mozilla