У меня есть:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Я хочу иметь возможность сделать что-то вроде:
array.remove("B");
но функция удаления отсутствует. Как это сделать?
У меня есть:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Я хочу иметь возможность сделать что-то вроде:
array.remove("B");
но функция удаления отсутствует. Как это сделать?
На самом деле я обновляю эту ветку более свежим однострочным решением:
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']
Прокрутите список в обратном порядке и используйте метод .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);
}
Вам нужно найти местоположение того, что вы ищете, .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. Удалите только первое: используйте, если вы уверены, что элемент существует, не поддерживается в <IE9
array.splice(array.indexOf('B'), 1);
2. Удалите только последнее: используйте, если вы уверены, что элемент существует, не поддерживается в <IE9
array.splice(array.lastIndexOf('B'), 1);
3. Удалить все вхождения: не поддерживается в <IE9
array = array.filter(v => v !== 'B');
Просто
array.splice(array.indexOf(item), 1);
Вы можете решить эту проблему, добавив функцию удаления в прототип массива.
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 (третий элемент)
Вы должны написать свой собственный удалить. Вы можете перебрать массив, захватить индекс элемента, который хотите удалить, и использовать splice
для его удаления.
В качестве альтернативы вы можете создать новый массив, создать цикл над текущим массивом, и если текущий объект не соответствует тому, что вы хотите удалить, поместите его в новый массив.
использовать array.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
const changedArray = array.filter( function(value) {
return value !== 'B'
});
или вы можете использовать:
const changedArray = array.filter( (value) => value === 'B');
Измененный массив будет содержать без значения 'B'