Javascript массив поиска и удаления строки?
Я:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Я хочу быть в состоянии сделать что-то вроде:
array.remove("B");
но там нет функции Удалить. Как мне это сделать?
10 ответов:
цикл по списку в обратном порядке, и использовать
.splice
метод.var array = ['A', 'B', 'C']; // Test var search_term = 'B'; for (var i=array.length-1; i>=0; i--) { if (array[i] === search_term) { array.splice(i, 1); // break; //<-- Uncomment if only the first term has to be removed } }
обратный порядок важен, когда все вхождения поискового термина должны быть удалены. В противном случае счетчик увеличится, и вы пропустите элементы.
когда только первое вхождение должно быть удалено, также будет работать следующее:
var index = array.indexOf(search_term); // <-- Not supported in <IE9 if (index !== -1) { array.splice(index, 1); }
Я на самом деле обновляю этот поток с более поздним 1-строчным решением:
let arr = ['A', 'B', 'C']; arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']
идея заключается в основном в фильтрации массива путем выбора всех элементов, отличных от элемента, который вы хотите удалить.
Примечание: удалить все вхождения.
демо
вам нужно найти местоположение того, что вы ищете с
.indexOf()
затем удалите его с помощью.splice()
function remove(arr, what) { var found = arr.indexOf(what); while (found !== -1) { arr.splice(found, 1); found = arr.indexOf(what); } } var array = new Array(); array.push("A"); array.push("B"); array.push("C"); remove(array, 'B'); alert(array);
это будет заботиться обо всех случаях.
список из одного лайнера
давайте решим эту проблему для этого массива:
var array = ['A', 'B', 'C'];
1. Удалите только первое: Используйте, если вы уверены, что элемент существует, не поддерживается в
array.splice(array.indexOf('B'), 1);
2. Удалите только последнее: Используйте, если вы уверены, что элемент существует, не поддерживается в
array.splice(array.lastIndexOf('B'), 1);
3. Удалить все вхождения: Не поддерживается в
array = array.filter(v => v !== 'B');
вы можете решить эту проблему, добавив функцию remove в прототип массива.
Array.prototype.remove = function(elem, all) { for (var i=this.length-1; i>=0; i--) { if (this[i] === elem) { this.splice(i, 1); if(!all) break; } } return this; };
использование:
var myArray = ['A', 'B', 'C', 'D', 'A'] myArray.remove('A'); => ["A", "B", "C", "D"] myArray.remove('A', true); => ["B", "C", "D"]
но будьте осторожны, расширение собственных прототипов может быть анти картины!
простое решение (ES6)
Если у вас нет повторяющихся элементов
Array.prototype.remove = function(elem) { var indexElement = this.findIndex(el => el === elem); if (indexElement != -1) this.splice(indexElement, 1); return this; };
вы должны написать вы сами удалить. Вы можете перебрать массив, захватить индекс элемента, который вы хотите удалить, и использовать
splice
, чтобы удалить его.кроме того, вы можете создать новый массив, цикл по нынешнее время, и если текущий объект не соответствует тому, что вы хотите удалить, поместить его в новый массив.
массив использовать.сращивание
/*array.splice(index , howMany[, element1[, ...[, elementN]]]) array.splice(index) // SpiderMonkey/Firefox extension*/ array.splice(1,1)
источник: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice