Подтвердить что ты не робот

Поиск и удаление массива Javascript?

У меня есть:

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

Я хочу иметь возможность сделать что-то вроде:

array.remove("B");

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

4b9b3361

Ответ 1

На самом деле я обновляю эту ветку более свежим однострочным решением:

let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']

Идея состоит в том, чтобы отфильтровать массив, выбрав все элементы, отличные от элемента, который вы хотите удалить.

Примечание: удалит все вхождения.

EDIT:

Если вы хотите удалить только первый случай:

t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']

Ответ 2

Прокрутите список в обратном порядке и используйте метод .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);
}

Ответ 3

DEMO

Вам нужно найти местоположение того, что вы ищете, .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)​​​​;

Это позаботится обо всех встречах.

Ответ 4

Список одного лайнера

Позвольте решить эту проблему для этого массива:

var array = ['A', 'B', 'C'];

1. Удалите только первое: используйте, если вы уверены, что элемент существует, не поддерживается в <IE9

array.splice(array.indexOf('B'), 1);

2. Удалите только последнее: используйте, если вы уверены, что элемент существует, не поддерживается в <IE9

array.splice(array.lastIndexOf('B'), 1);

3. Удалить все вхождения: не поддерживается в <IE9

array = array.filter(v => v !== 'B'); 

Ответ 5

Просто

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

Ответ 6

Вы можете решить эту проблему, добавив функцию удаления в прототип массива.

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"]

Но будьте осторожны, расширяя собственные прототипы, может быть анти-шаблон!

Ответ 7

Простое решение (ES6)

Если у вас нет дублирующего элемента

Array.prototype.remove = function(elem) {
  var indexElement = this.findIndex(el => el === elem);
  if (indexElement != -1)
    this.splice(indexElement, 1);
  return this;
};   

Демо онлайн (скрипка)

Ответ 8

использовать:

array.splice(2, 1);

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

Ответ 9

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

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

Ответ 11

const changedArray = array.filter( function(value) {
  return value !== 'B'
});

или вы можете использовать:

const changedArray = array.filter( (value) => value === 'B');

Измененный массив будет содержать без значения 'B'