Как удалить конкретное значение из массива с помощью jQuery

у меня есть массив, который выглядит так: var y = [1, 2, 3];

Я хотел бы удалить 2 из массива y.

Как удалить определенное значение из массива с помощью jQuery? Я пробовал pop() но это всегда удаляет последний элемент.

17 ответов


рабочий 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().


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

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


можно использовать подчеркивания.js. Это действительно упрощает дело.

в вашем случае код, который вы должны будете правильно -

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

и результатом будет [1,3].

уменьшает код, который вы пишете.


не путь 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')

удалить элемент в массиве

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

в Javascript нет собственного способа сделать это. Вы можете использовать библиотеку или написать небольшую функцию, чтобы сделать это вместо этого:http://ejohn.org/blog/javascript-array-remove/


вы можете использовать .не работает так:

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

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

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

индекс требуются. Целое число, указывающее, в какой позиции добавлять / удалять элементы, используйте отрицательные значения для указания позиции из конца массива

howmany требуются. Количество удаляемых элементов. Если установлено значение 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 );

надеюсь, что это помогает.


У меня была аналогичная задача, когда мне нужно было удалить сразу несколько объектов на основе свойства объектов в массиве.

Итак, после нескольких итераций я получаю:

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, которая находит первый индекс value на array
  • выше возвращает -1, если значение не найдено, поэтому перед удалением проверьте, что i является допустимым индексом. Удаление индекса -1 означает удаление последнего, что здесь не полезно.
  • .splice (index, count) удаляет count количество значений, начиная с index, поэтому мы просто хотим count of 1

Я бы расширил класс Array с помощью


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

это работает во всех случаях и позволяет избежать проблем в приведенных выше методах. Надеюсь, это поможет!


сначала проверяет, существует ли элемент в массиве

$.inArray(id, releaseArray) > -1

above line возвращает индекс этого элемента, если он существует в массиве, в противном случае он возвращает -1

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

теперь над строкой будет удален этот элемент из массива, если он найден. Чтобы суммировать логику ниже, необходим код для проверки и удаления элемента из массива.

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

чтобы безопасно удалить 2 из массива с помощью vanilla JavaScript:

// 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