我有一个看起来像这样的数组: var y = [1, 2, 3];
我想2
从array中删除y
。
如何使用jQuery从数组中删除特定值?我已经尝试过,pop()
但是总是删除最后一个元素。
我有一个看起来像这样的数组: var y = [1, 2, 3];
我想2
从array中删除y
。
如何使用jQuery从数组中删除特定值?我已经尝试过,pop()
但是总是删除最后一个元素。
Answers:
工作中的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()
。
while
循环和临时变量:var found; while ((found = $.inArray(removeItem, y)) !== -1) y.splice(found, 1);
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);
不是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')
i
被覆盖。
用Java语言没有做到这一点的本地方法。您可以改用库或编写一个小函数来做到这一点:http : //ejohn.org/blog/javascript-array-remove/
我的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个项目。
怎么运行的:
value
中的array
count
开始值的数量index
,所以我们只是想count
的1
//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;
有一个简单的接头解决方案。根据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 );
希望这可以帮助。
首先检查数组中是否存在元素
$.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);
}
我有一个类似的任务,我需要根据数组中对象的属性一次删除多个对象。
因此,经过几次迭代,我最终得到:
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]
/** 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"!
这在所有情况下均有效,并且避免了上述方法中的问题。希望有帮助!
第二个最受支持的答案是在与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);
其结果为,这将导致不进行任何拼接...都无需为此编写循环。
要使用原始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
只是为了补充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>