Javascript массив поиска и удаления строки?


Я:

var array = new Array();
array.push("A");
array.push("B");
array.push("C");

Я хочу быть в состоянии сделать что-то вроде:

array.remove("B");

но там нет функции Удалить. Как мне это сделать?

10 72

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

онлайн демо-версия (скрипка)

использование:

array.splice(2, 1);

Это удаляет элемент из массива, начиная с индекса 2 (3-й пункт)

вы должны написать вы сами удалить. Вы можете перебрать массив, захватить индекс элемента, который вы хотите удалить, и использовать splice, чтобы удалить его.

кроме того, вы можете создать новый массив, цикл по нынешнее время, и если текущий объект не соответствует тому, что вы хотите удалить, поместить его в новый массив.

просто

array.splice(array.indexOf(item), 1);

массив использовать.сращивание

/*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