How to remove specific value from array using jQuery
我有一个这样的数组:
我想从数组
如何使用jquery从数组中删除特定值?我尝试过
一个正在工作的J小提琴
你可以这样做:
1 2 3 4 5 6 | var y = [1, 2, 2, 3, 2] var removeItem = 2; y = jQuery.grep(y, function(value) { return value != removeItem; }); |
结果:
1 | [1, 3] |
http://sniplr.com/view/14381/remove-item-from-array-with-jquery/
使用jquery,您可以执行这样的单行操作:
示例:http://jsfiddle.net/hwkqy/
1 | y.splice( $.inArray(removeItem, y), 1 ); |
使用本机
1 2 3 4 5 | var arr = [1, 2, 3, 4, 5, 5]; var result = arr.filter(function(elem){ return elem != 5; });//result -> [1,2,3,4] |
http://jsfidle.net/emrefatih47/ar0dhvhww/
在ECMAScript 6中:
1 2 3 | let values = [1,2,3,4,5]; let evens = values.filter(v => v % 2 == 0); alert(evens); |
https://jsfiddle.net/emrefatih47/nnn3c2fo/
您可以使用underline.js。这真的让事情变得简单。
在您的情况下,您必须编写的所有代码都是-
1 | _.without([1,2,3], 2); |
结果将是[1,3]。
它减少了您编写的代码。
不是jquery方式,但…为什么不用简单的方法呢?从以下数组中删除"c"
1 2 3 4 5 | var a = ['a','b','c','d'] a.splice(a.indexOf('c'),1); >["c"] a ["a","b","d"] |
您还可以使用:(请注意:不要修改您不拥有的对象)
1 2 3 | 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'] |
添加为simpleR
删除数组中的项
1 2 3 | var arr = ["jQuery","JavaScript","HTML","Ajax","Css"]; var itemtoRemove ="HTML"; arr.splice($.inArray(itemtoRemove, arr), 1); |
1 2 3 4 5 6 7 8 9 | //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) } } } |
使用示例
1 2 3 4 5 6 7 8 9 10 11 | 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]] |
要使用这个原型函数,需要将它粘贴到代码中。然后,您可以将它应用于任何具有"点标记"的数组:
1 | someArr.remove('elem1') |
在JavaScript中没有本地的方法可以做到这一点。您可以使用库或编写一个小函数来代替:http://ejohn.org/blog/javascript-array-remove/
您可以使用。不能这样工作:
1 2 3 4 | var arr = [ 1 , 2 , 3 , 5 , 8]; var searchValue = 2; var newArr = $(arr).not([searchValue]).get(); |
我的用户113716答案版本。如果找不到匹配项,则他的值将被删除,这是不好的。
1 2 3 4 5 6 7 8 9 10 | var y = [1, 2, 3] var removeItem = 2; var i = $.inArray(removeItem,y) if (i >= 0){ y.splice(i, 1); } alert(y); |
现在,如果找到匹配项,则删除1项;如果没有找到匹配项,则删除0项。
它是如何工作的:
- $in array(value,array)是jquery函数,它查找
array 中value 的第一个索引。 - 如果找不到值,上面的返回-1,因此在删除之前,请检查i是否是有效索引。删除索引-1意味着删除最后一个,这在这里没有帮助。
- .splice(index,count)删除从
index 开始的count 个值,所以我们只需要1 的count 个值。
拼接有一个简单的解决方案。根据W3学校的拼接语法如下:
1 | array.splice(index, howmany, item1, ....., itemX) |
需要索引。一个整数,指定添加/删除项的位置,使用负值指定从数组末尾开始的位置。
需要多少。要删除的项目数。如果设置为0,则不会删除任何项
项1,…,项x可选。要添加到数组中的新项
请记住,如果找到以下JS,它将从给定的数组中弹出一个或多个匹配项,否则不会删除数组的最后一个项。
1 2 3 4 5 6 | 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; |
或
1 2 3 | var itemsFound = $.grep(x, function (elem) { return elem == item; }).length; |
所以决赛应该是这样的
1 | x.splice( startItemIndex , itemsFound ); |
希望这有帮助。
1 2 3 4 5 6 7 8 9 10 11 | //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; |
我将使用
1 2 3 4 5 6 7 8 | var ArrayInstanceExtensions = { pick_and_remove: function(index){ var picked_element = this[index]; this.splice(index,1); return picked_element; } }; $.extend(Array.prototype, ArrayInstanceExtensions); |
虽然看起来有点冗长,但现在您可以在任何可能需要的数组上调用
用途:
1 2 3 | array = [4,5,6] //=> [4,5,6] array.pick_and_remove(1); //=> 5 array; //=> [4,6] |
你可以在口袋妖怪主题的动作中看到所有这些。
First checks if element exists in the array
1 | $.inArray(id, releaseArray) > -1 |
above line returns the index of that element if it exists in the array, otherwise it returns -1
1 | releaseArray.splice($.inArray(id, releaseArray), 1); |
now above line will remove this element from the array if found. To sum up the logic below is the required code to check and remove the element from array.
1 2 3 4 5 6 | if ($.inArray(id, releaseArray) > -1) { releaseArray.splice($.inArray(id, releaseArray), 1); } else { releaseArray.push(id); } |
1 2 3 4 5 6 7 8 9 10 11 | /** 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; } |
然后您可以在代码的任何地方调用该函数。
1 2 3 4 | 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"! |
这在所有情况下都有效,避免了上述方法中的问题。希望有帮助!
我有一个类似的任务,我需要根据数组中对象的属性同时删除多个对象。
所以经过几次迭代,我最终得到:
1 | list = $.grep(list, function (o) { return !o.IsDeleted }); |
要使用普通JavaScript安全地从数组中删除2,请执行以下操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | // 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