Javascript - удалить элемент массива по значению

Моя ситуация:

var id_tag = [1,2,3,78,5,6,7,8,47,34,90];

Я хотел бы delete where id_tag = 90 и вернуться:

var id_tag = [1,2,3,78,5,6,7,8,47,34];

Как я могу это сделать?

Ответ 1

Вы захотите использовать JavaScript Array splice method:

var tag_story = [1,3,56,6,8,90],
    id_tag = 90,
    position = tag_story.indexOf(id_tag);

if ( ~position ) tag_story.splice(position, 1);

P.S.. Объяснение этого яркого ярлыка ~ tilde см. в этом сообщении:

Использование ~ тильды с indexOf для проверки наличия элемента в массиве.


Примечание: IE < 9 не поддерживает .indexOf() на массивах. Если вы хотите убедиться, что ваш код работает в IE, вы должны использовать jQuery $.inArray():

var tag_story = [1,3,56,6,8,90],
    id_tag = 90,
    position = $.inArray(id_tag, tag_story);

if ( ~position ) tag_story.splice(position, 1);

Если вы хотите поддерживать IE < 9, но на странице еще нет jQuery, нет необходимости использовать его только для $.inArray. Вы можете использовать этот polyfill.

Ответ 2

Если вы собираетесь использовать это часто (и на нескольких массивах), расширьте объект Array, чтобы создать неустановленную функцию.

Array.prototype.unset = function(value) {
    if(this.indexOf(value) != -1) { // Make sure the value exists
        this.splice(this.indexOf(value), 1);
    }   
}

tag_story.unset(56)

Ответ 3

tag_story.splice(tag_story.indexOf(id_tag), 1);

Ответ 4

function removeValue(arr, value) {
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] === value) {
            arr.splice(i, 1);
            break;
        }
    }
    return arr;
}

Это можно назвать так:

removeValue(tag_story, 90);

Ответ 5

В качестве варианта

delete array[array.indexOf(item)];

Если вы ничего не знаете о delete, НЕ используйте этот.

Ответ 6

Вот некоторые вспомогательные функции, которые я использую:

Array.contains = function (arr, key) {
    for (var i = arr.length; i--;) {
        if (arr[i] === key) return true;
    }
    return false;
};

Array.add = function (arr, key, value) {
    for (var i = arr.length; i--;) {
        if (arr[i] === key) return arr[key] = value;
    }
    this.push(key);
};

Array.remove = function (arr, key) {
    for (var i = arr.length; i--;) {
        if (arr[i] === key) return arr.splice(i, 1);
    }
};

Ответ 7

Вы хотите использовать .indexOf() и .splice(). Что-то вроде:

tag_story.splice(tag_story.indexOf(90),1);

Ответ 8

Мне нравится использовать фильтр:

var id_tag = [1,2,3,78,5,6,7,8,47,34,90];

// delete where id_tag = 90
id_tag = id_tag.filter(function(x) {
    if (x !== 90) {
      return x;
    }
});

Ответ 9

Вы можете использовать lodash.js

.

_ тянуть (имяМассив, valueToBeRemove);

В вашем случае: - _.pull(id_tag, 90);

Ответ 10

var id_tag = [1,2,3,78,5,6,7,8,47,34,90]; 
var delete_where_id_tag = 90
    id_tag =id_tag.filter((x)=> x!=delete_where_id_tag);