На JavaScript удалить элемент массива по значению [дубликат]
этот вопрос уже есть ответ здесь:
Как удалить элемент из массива по значению?
32 ответы
моя ситуация:
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];
как я могу это сделать?
10 ответов:
вы хотите использовать JavaScript массив
spliceметод: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);П. С. для объяснения этого круто
~Тильда ярлык, смотрите этот пост:С помощью
~Тильда сindexOfчтобы проверить наличие элемента в массиве.
Примечание: IE .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 просто на
$.inArray. Вы можете использовать этот полифилл.
Если вы собираетесь использовать это часто (и на нескольких массивах), расширить объект массива для создания функции unset.
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)
Как вариант
delete array[array.indexOf(item)];Если вы ничего не знаете о
deleteоператор не используйте это.
вот некоторые вспомогательные функции, которые я использую:
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); } };
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);
вы хотите использовать
.indexOf()и.splice(). Что-то вроде:tag_story.splice(tag_story.indexOf(90),1);
Мне нравится использовать фильтра:
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; } });
вы можете использовать lodash.js
_.pull(arrayName, valueToBeRemove);
в вашем случае :- _.pull(id_tag, 90);
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);
Comments