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

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

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

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

Комментарии к вопросу (2)
Решение

Рабочий [JSFIDDLE][1]

Вы можете сделать что-то вроде этого:

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/

Комментарии (14)

С jQuery вы можете выполнять однострочную операцию, как это:

Пример: http://jsfiddle.net/HWKQY/

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

Использует родной .splice () и jQuery's $. InArray ().

Комментарии (8)

Метод 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/

Комментарии (1)

Вы можете использовать underscore.js. Это действительно делает вещи простыми.

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

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

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

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

Комментарии (0)

Не просто, но... Почему бы не использовать более простой способ. Удалить 'c' из следующего массива

var a = ['a','b','c','d']
a.splice(a.indexOf('c'),1);
>["c"]
a
["a", "b", "d"]

Вы также можете использовать: (Примечание для себя: [Не изменяйте объекты, которыми у вас нет](http://www.nczonline.net/blog/2010/03/02/maintainable-javascript-dont-modify-objects- you-down-own /))

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

Комментарии (2)

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

var arr = ["jQuery", "JavaScript", "HTML", "Ajax", "Css"];
var itemtoRemove = "HTML";
arr.splice($.inArray(itemtoRemove, arr), 1);
Комментарии (0)
//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')
Комментарии (4)

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

Комментарии (0)

Моя версия ответа 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 (значение, массив) - это функция jQuery, которая находит первый индекс value в array
  • Вышеуказанное возвращает -1, если значение не найдено, поэтому убедитесь, что я являюсь действительным индексом, прежде чем мы сделаем удаление. Удаление индекса -1 означает удаление последнего, что здесь бесполезно.
  • .splice (index, count) удаляет число значений count, начиная с index, поэтому мы просто хотим count из 1
Комментарии (0)

Существует простое решение со сплайсом. Согласно 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 );

Надеюсь, это поможет.

Комментарии (0)

Вы можете использовать функцию .not следующим образом:

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

var newArr = $(arr).not([searchValue]).get();
Комментарии (2)
//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;
Комментарии (0)

Попробуй это, это работает для меня

_clientsSelected = ["10", "30", "12"];
function (removeItem) {
console.log(removeItem);
   _clientsSelected.splice($.inArray(removeItem, _clientsSelected), 1);
   console.log(_clientsSelected);
`enter code here`},
Комментарии (0)

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

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

list = $.grep(list, function (o) { return !o.IsDeleted });
Комментарии (0)

Я бы расширил класс массива функцией pick_and_remove (), например так:

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]

Вы можете увидеть все это в действии на тему покемонов [здесь.][1]

Комментарии (0)
/** 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"!

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

Комментарии (0)

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

$.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);
            }
Комментарии (0)

Чтобы безопасно удалить 2 из массива, используя ванильный 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]

Источник полифиллинга: Мозилла

Комментарии (0)