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