Як видалити елемент у масиві в JavaScript?


Відповіді:


243

Не використовуйте delete, оскільки він не видалить елемент з масиву, він встановить його лише як невизначений, що потім не буде відображено правильно у довжині масиву.

Якщо ви знаєте ключ, ви повинні використовувати сплайс, тобто

myArray.splice(key, 1);

Для тих, хто перебуває на посаді Стівена, ви можете спробувати щось подібне:

for (var key in myArray) {
    if (key == 'bar') {
        myArray.splice(key, 1);
    }
}

або

for (var key in myArray) {
    if (myArray[key] == 'bar') {
        myArray.splice(key, 1);
    }
}

3
+1 Добрий момент, мені також подобається такий спосіб: ejohn.org/blog/javascript-array-remove
CMS

3
@TentistMaster - Хочете пояснити? Я не знаю, що це означає і прагну вчитися. Як завжди, редагування в 1 000 000 разів краще, ніж чужий коментар; ви повинні знати, що з кількістю респ.
збирається

21
Використовуйте for (var key in myArray)замість for (key in myArray)- інакше keyце глобальна змінна, і якщо ви викликаєте функцію всередині цього циклу, що має ту ж проблему, ви отримаєте несподівані результати.
ThiefMaster

2
Зауважте, другий приклад не працює, якщо в масиві є кілька елементів у рядку, які відповідають "бар". Індекс масиву зміститься, і ви пропустите сплайсування половини елементів. Натомість використовуйте цикл for, який зменшує індекс, коли знайдено збіг.
Дейв Ланча


52
delete foo[key];

: D


4
технічно це не відповідає на питання. він хоче видалити клавішу "bar". і ваша ключова змінна цього не означає. : P
Кон

4
key = 'бар'; eval ("видалити foo." + клавіша); ховається ; D
olliej

3
Як НЕ використовувати eval. Видалення ключа / індексу об'єкта / масиву може бути досягнуто набагато простішими методами, не використовуючими eval.
Діней

4
Насправді, якщо ви вилучите з індексованого масиву видалення foo [key], він зберігатиме значення у foo [key] = undefined, і foo.length залишатиметься такою ж, що неправильно. Тому використовуйте натомість SPLICE
Павел Иванов,

використовувати видалити foo [ключ] це неправильно; слід використовувати foo.splice (ключ, 1);
vnguyen

38

Важлива примітка: Масиви JavaScript - це не асоціативні масиви, як ті, до яких ви могли використовуватись із PHP. Якщо ваш "ключ масиву" є рядком, ви більше не працюєте над вмістом масиву. Ваш масив є об'єктом, і ви використовуєте нотацію дужок для доступу до члена, названого <ім'я ключа>. Таким чином:

var myArray = [];
myArray ["бар"] = вірно;
myArray ["foo"] = вірно;
попередження (myArray.length); // повертає 0.

оскільки ви не додали елементів до масиву, ви змінили лише смугу та елементи foo myArray.


37

Якщо ви знаєте назву ключа, просто так:

delete array['key_name']

2
Це не масив! Це об’єкт (так, це називаються асоціативними масивами в JS, але ні, насправді вони не є, і цей метод є шкідливим, якщо ви справді працюєте з JS-масивом).
Wintercounter

3

Ось як я це зробив би

 myArray.splice( myArray.indexOf('bar') , 1) 

1
Метод Array.prototype.indexOf () шукає значення в масиві, а не для ключа. Тож це не вийде.
Надав

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.