У мене є:
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");
але немає функції видалення. Як я це досягну?
Відповіді:
Я фактично оновлюю цей потік більш сучасним рішенням на 1 рядок:
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. До тих пір, поки ви кешуєте межу, звичайно, що ускладнить справи, якщо ви продовжуватимете після першого матчу (але не, якщо ви зупинитесь на ньому).
Список одного вкладиша
Давайте вирішимо цю проблему для цього масиву:
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
якщо нічого не буде знайдено та озвучено, сплайс видалить 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 (3-й елемент)
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()
.