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

How to remove specific value from array using jQuery

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

我想从数组y中删除2

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


一个正在工作的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 );

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


jQuery.filter方法是有用的。这适用于array对象。

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

添加为simpleRa.push('c')


删除数组中的项

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函数,它查找arrayvalue的第一个索引。
  • 如果找不到值,上面的返回-1,因此在删除之前,请检查i是否是有效索引。删除索引-1意味着删除最后一个,这在这里没有帮助。
  • .splice(index,count)删除从index开始的count个值,所以我们只需要1count个值。

拼接有一个简单的解决方案。根据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;

我将使用pick_and_remove()函数扩展数组类,如下所示:

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);

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

用途:

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