У меня есть:
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']
Идея состоит в том, чтобы фильтровать массив, выбирая все элементы, отличные от элемента, который вы хотите удалить.
Примечание: удалит все вхождения.
РЕДАКТИРОВАТЬ:
Если вы хотите удалить только первое появление:
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);
}
0не происходит автоматически быстрее, как, скажем, в C. Если вы кешируете лимит, конечно, что усложнит ситуацию, если вы продолжите идти после первого совпадения (но не если вы остановитесь на нем).
Список One Liners
Решим эту проблему для этого массива:
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');
Вам нужно найти местоположение того, что вы ищете, а .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);
Это позаботится обо всех происшествиях.
Uncaught ReferenceError: array is not defined. Что случилось?
.indexOf()одним преимуществом . Если вы передадите foundв качестве второго аргумента .indexOf()вызов внутри цикла while , элементы в массиве, которые уже были проверены и оказались не равными, не проверяются снова: found = arr.indexOf(what, found);
Просто
array.splice(array.indexOf(item), 1);
-1если ничего не будет найдено, и упс, splice удалит 1 элемент из конца массива
Простое решение (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(2, 1);
Это удаляет один элемент из массива, начиная с индекса 2 (третий элемент)
array.splice(2,1)который удаляет 1 элемент с индексом 2 из массива. проверьте https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/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
arrayи spliceдолжна быть точкой.
.indexOf()и.splice()должно помочь. Или, может быть, альтернативно.filter().