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

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

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

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

Ответ 2

С помощью jQuery вы можете выполнить однострочную операцию следующим образом:

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

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

Использует собственный .splice() и jQuery $.inArray().

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

Существует простое решение с сращиванием. Согласно W3School последовал синтаксис сплайсинга;

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

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

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

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

Ответ 13

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

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

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

Ответ 14

Я бы расширил класс Array с помощью функции 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]

Вы можете увидеть все это в pokemon-themed action здесь.

Ответ 15

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

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

Ответ 16

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

$.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);
            }

Ответ 17

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

Polyfill источник: Mozilla

Ответ 18

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

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