Подтвердить что ты не робот

В jquery как удалить элемент массива либо через индекс [ "ключ" ], либо значение

В jQuery/JavaScript Как удалить элемент массива?

что-то вроде:

array.remove(array["key"]);

// or 

array.remove("value")
4b9b3361

Ответ 1

Судя по вашему коду, похоже, что вы хотите удалить свойство объекта, которое вы бы сделали с delete:

var obj = { key: "value" };

delete obj["key"];

Очень полезное руководство по работе с объектами в JavaScript можно найти на MDN.

Ответ 2

Для массивов используйте метод splice:

var array = [1, 2, 3, 4, 5];
array.splice(2, 1);
console.log(array); // [1, 2, 4, 5]

Вы можете сделать свою собственную функцию для удаления (первого вхождения) определенного элемента в массиве:

Array.prototype.remove = function(el) {
    return this.splice(this.indexOf(el), 1);
}
var arr = [1, 2, 3, 4, 5];
arr.remove(4);
console.log(arr); // [1, 2, 3, 5]

Если вы хотите удалить элемент из объекта, используйте синтаксис delete:

var a = {key1: 'val1', key2: 'val2'};
delete a.key1;
console.log(a); // {key2: 'val2'}

И снова вы можете сделать свою собственную функцию для обработки этого:

Object.prototype.remove = function(el) {
    if (this.hasOwnProperty(el)) {
        delete this[el];
    }
    return this;
}
var a = {key1 : 'val1', key2: 'val2'};
a.remove('key1');
console.log(a); // {key2: 'val2'}

Обновить:

  • Хотя это был всего лишь пример, как отметил @Eric, не очень хорошая идея изменить прототип объекта. Поэтому я переписал примеры, которые не изменяют состояние объекта.
  • Добавлена ​​проверка, существует ли элемент в массиве. Если он не существует, индекс повторной записи будет -1, и метод сплайсинга удалит последний элемент (первый элемент из конца массива). Спасибо, @amnotiam!


function remove(collection, key) {
    // if the collections is an array
    if(collection instanceof Array) {
        if(collection.indexOf(key) != -1) {
            collection.splice(collection.indexOf(key), 1);
        }
    }
    // it an object
    else if(collection.hasOwnProperty(key)) {
        delete collection[key];
    }
    return collection;
};

И, конечно, поскольку вопрос был помечен jquery, мы можем добавить эту функцию в качестве плагина jquery:

(function($, global, undefined) {
    $.removeElementFromCollection = function(collection,key) {
        // if the collections is an array
        if(collection instanceof Array) {
            // use jquery `inArray` method because ie8 
            // doesn't support the `indexOf` method
            if($.inArray(key, collection) != -1) {
                collection.splice($.inArray(key, collection), 1);
            }
        }
        // it an object
        else if(collection.hasOwnProperty(key)) {
            delete collection[key];
        }

        return collection;
    };
})(jQuery, window); 

И затем используйте его следующим образом:

var array = [1, 2, 3, 4, 5];
$.removeElementFromCollection(array, 2); // [1, 3, 4, 5]

var object = {1: 2, 3: 4};
$.removeElementFromCollection(object, 1); // {3: 4}

Ответ 3

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.splice(2, 1);

удалит 1 элемент из массива, положение 2, которое Apple

Ответ 4

array["key"] не является ключом массива (в javascript нет ассоциативных массивов, если вы исходите из PHP, они могут выглядеть как они, но они являются объектами), но свойство объекта, я думаю, вы можете использовать удалить

delete array.key