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

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

我想从数组y中删除2

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

791968 次浏览

一个工作的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/ < a href = " http://snipplr.com/view/14381/remove-item-from-array-with-jquery/ " > < / >

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

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

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

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

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

不是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')

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

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

在你的例子中,你需要写的所有代码都是-

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

结果是[1,3]。

它减少了你编写的代码。

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

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

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

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

var y = [1, 2, 3]
var removeItem = 2;


var i = $.inArray(removeItem,y)


if (i >= 0){
y.splice(i, 1);
}


alert(y);

如果找到匹配项则删除1项,如果没有匹配项则删除0项。

工作原理:

  • 美元。inArray(value, array)是一个jQuery函数,它在array中查找value的第一个索引
  • 如果未找到值,则返回-1,因此在执行删除之前检查i是否是有效的索引。删除索引-1意味着删除最后一个,这在这里没有帮助。
  • .splice(index, count)删除从index开始的count个数的值,因此我们只需要1count

我将用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]

你可以在口袋妖怪主题的动作在这里。中看到这一切

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

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


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

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/

/** 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"!

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

使用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

有一个简单的解决方案与剪接。根据W3School拼接语法如下;

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

指数必需的。指定在什么位置添加/删除项的整数。使用负值指定从数组末尾开始的位置

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

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

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

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

希望这能有所帮助。

移除数组中的项目

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

首先检查元素是否存在于数组中

$.inArray(id, releaseArray) > -1

如果数组中存在该元素,则返回该元素的下标,否则返回-1

 releaseArray.splice($.inArray(id, releaseArray), 1);

现在,如果找到这个元素,上面的行将从数组中移除。总结下面的逻辑是检查和从数组中删除元素所需的代码。

  if ($.inArray(id, releaseArray) > -1) {
releaseArray.splice($.inArray(id, releaseArray), 1);
}
else {
releaseArray.push(id);
}

试试这个,它对我有用

_clientsSelected = ["10", "30", "12"];
function (removeItem) {
console.log(removeItem);
_clientsSelected.splice($.inArray(removeItem, _clientsSelected), 1);
console.log(_clientsSelected);
`enter code here`},

第二个获得最多好评的答案是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);,这将导致没有任何内容被拼接…所有这些都不需要为此写一个循环。

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

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

function arrayRemoveVal(array, removeValue){
var newArray = jQuery.grep(array, function(value) {return value != removeValue;});
return newArray;
}
var promoItems = [1,2,3,4];
promoItems = arrayRemoveVal(promoItems, 3);// removes 3
console.log(promoItems);
promoItems = arrayRemoveVal(promoItems, 3);// removes nothing
console.log(promoItems);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>