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

Ela*_*ran 398 arrays jquery

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

我想2从数组中删除y.

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

Sar*_*raz 590

一个有效的JSFIDDLE

你可以这样做:

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

y = jQuery.grep(y, function(value) {
  return value != removeItem;
});
Run Code Online (Sandbox Code Playgroud)

结果:

[1, 3]
Run Code Online (Sandbox Code Playgroud)

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

  • 这个答案完全不对吗?它正在创建一个缺少项目的新数组,而不是从数组中删除项目.这些都不是一回事. (103认同)
  • 这是一个复杂的O(n)的删除...数组中的值越多,它将是最糟糕的...... (5认同)
  • O(n) 的复杂度不是问题。 (3认同)
  • 这是个好消息,是的,需要正确的修改:) (2认同)
  • 我认为@ user113716回答,关于默认的JS方法是正确的方法.任何本机方法总是会更好,更快. (2认同)

use*_*716 352

使用jQuery,您可以执行以下单行操作:

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

y.splice( $.inArray(removeItem, y), 1 );
Run Code Online (Sandbox Code Playgroud)

使用native .splice()和jQuery $.inArray().

  • 警告 - 可能会删除错误的项目!如果该值不存在,则$ .inArray返回-1,并且.splice将负索引视为"从末尾开始",因此如果您尝试删除的值不存在,则将删除其他一些值.此外,$ .grep将删除所有匹配项,而此方法仅删除第一个. (45认同)
  • @Elankeeran - 不客气.:o)我应该注意,这只会删除第一个实例.如果有多个要删除,它将无法正常工作. (13认同)
  • 我还将removeItem更改为数组中不存在的值,并删除了数组中的最后一项.如果你不确定removedItem是否存在,请使用它:y = $ .grep(y,function(val){return val!= removeItem;}); (7认同)
  • 要解决上述两个问题,请使用一个 `while` 循环和一个像这样的临时变量: `var found; while ((found = $.inArray(removeItem, y)) !== -1) y.splice(found, 1);` (2认同)
  • 尽管使用 ES5 `.indexOf()` 而不是 jQuery 会好得多,因为您可以使用找到的最后一个索引作为下一次搜索的起点,这比每次搜索整个数组高效得多。`发现无功= 0; while ((found = y.indexOf(removeItem, found)) !== -1) y.splice(found, 1);` (2认同)

dda*_*san 44

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]
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/emrefatih47/ar0dhvhw/

在Ecmascript 6中:

let values = [1,2,3,4,5];
let evens = values.filter(v => v % 2 == 0);
alert(evens);
Run Code Online (Sandbox Code Playgroud)

https://jsfiddle.net/emrefatih47/nnn3c2fo/

  • 似乎从提出的解决方案中发挥最大作用,即使它实际上并没有改变现有阵列,而是创建一个新阵列.它也适用于不存在的值或空数组.我在JSFiddle中进行了快速性能检查:使用具有800.000值的数组,需要大约6秒才能完成.不确定这是否快. (2认同)
  • 该解决方案使用普通 JS 高阶函数过滤器,**不是** jQuery 过滤器方法。 (2认同)

vat*_*sal 35

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

在您的情况下,您必须编写的所有代码是 -

_.without([1,2,3], 2);
Run Code Online (Sandbox Code Playgroud)

结果将是[1,3].

它减少了你编写的代码.


Aam*_*idi 31

不是jQuery方式但是......为什么不使用更简单的方法.从以下数组中删除"c"

var a = ['a','b','c','d']
a.splice(a.indexOf('c'),1);
>["c"]
a
["a", "b", "d"]
Run Code Online (Sandbox Code Playgroud)

您还可以使用:(请注意:不要修改您不拥有的对象)

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']
Run Code Online (Sandbox Code Playgroud)

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

  • 不行.如果未找到,则删除数组中的最后一项. (8认同)
  • IE8-不支持indexOf. (7认同)

小智 18

删除数组中的项目

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


yes*_*nik 12

//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)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用示例

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]]
Run Code Online (Sandbox Code Playgroud)

要使用此原型函数,您需要将其粘贴到代码中.然后你可以将它应用于任何带有'点表示法'的数组:

someArr.remove('elem1')
Run Code Online (Sandbox Code Playgroud)

  • 这样的问题唯一的问题是它覆盖了全局Array对象的remove方法,这意味着项目中依赖于默认行为的任何其他代码都会以错误行为结束. (3认同)
  • 另一个问题是全局变量`i`被覆盖. (2认同)

小智 6

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

$.inArray(id, releaseArray) > -1
Run Code Online (Sandbox Code Playgroud)

如果该元素存在于数组中,则上面的行返回该元素的索引,否则返回 -1

 releaseArray.splice($.inArray(id, releaseArray), 1);
Run Code Online (Sandbox Code Playgroud)

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

  if ($.inArray(id, releaseArray) > -1) {
                releaseArray.splice($.inArray(id, releaseArray), 1);
            }
            else {
                releaseArray.push(id);
            }
Run Code Online (Sandbox Code Playgroud)


小智 5

在 Javascript 中没有本地方法可以做到这一点。您可以使用库或编写一个小函数来执行此操作:http : //ejohn.org/blog/javascript-array-remove/


小智 5

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

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

var newArr = $(arr).not([searchValue]).get();
Run Code Online (Sandbox Code Playgroud)

  • 我已将代码复制到 jsfiddle 中,将 `searchValue` 更改为 4,运行代码,没有检测到问题。所有值仍然存在。@JulianK (4认同)
  • 如果值不在那里,这将清除整个数组,因此 searchValue = 4 将返回一个空白数组。 (2认同)