Прежде чем очищать массив, ты должен знать, что массивы также являются объектами в JavaScript, как и все остальные элементы языка.
Это значит, что у массивов могут быть не только целочисленные индексы. Массивы могут иметь разные названия ключей. Ключи могут быть отрицательными целыми числами. Ключи могут быть строковыми.
Способ № 1 — Очищение массива через присвоение нового пустого массива
Массив можно очистить при помощи присваивания нового значения для его идентификатора привязки (BindingIdentifier).
По своей сути это не очистка как таковая, а просто переназначение «объекта массива» для идентификатора привязки. Вот и всё. Когда на старый «объект массива» пропадёт ссылка в среде выполнения кода, то через некоторое время сборщик мусора не найдёт на него ссылки и просто удалит его из памяти.
Новым значением для старого идентификатора привязки должен быть пустой массив, который:
- объявлен литерально квадратными скобками или
- через функцию конструктор Array().
let m1 = [1, 2, 3, 4] m1.length // 4 m1 = [] или m1 = Array() m1.length // 0
Пример работы
Способ № 2 — Очищение массива через свойство длины
Чтобы очистить массив от элементов нужно установить его длину на ноль. Эта операция удалит все элементы массива, а также их значения.
massiv.length = 0
Видео инструкция
В этом видео приводится пример очистки массива в JavaScript. Ввод команд осуществляется в консоль браузера Google Chrome. Результат виден сразу.
Одной командой
Анонимный массив
[5,"efim360.ru", true, [1,2], {a:2}].length = 0
Именованный массив
let massiv = [5,"efim360.ru", true, [1,2], {a:2}]
Но у этого способа есть один нюанс!
Создадим нестандартный массив. Три значения объявим литерально, внутри квадратных скобок. Два значения присвоим как ключи для объекта массива.
let m2 = [1, 2, 3] m2.s = 4 m2.f = 5
Пример работы
Кроме целочисленных индексов, в этом массиве есть строковые ключи. Как поведёт себя длина массива? Какие значения будут отображать при её получении и при её установке?
Обратите внимание. Свойство длины работает только по целочисленным индексам и не затрагивает строковые индексы.
Фактически мы имеем 5 элементов внутри массива, но по факту свойство длины видит лишь 3 из них при обращении к lenght.
Если мы изменим значение свойства длины lenght на 0, тогда элементы с целочисленными индексами будут удалены (очищены), но элементы со строковыми индексами останутся на своих местах.
Можно ли считать такой массив очищенным? Думаю, что нельзя. Но в вашем проекте это может работать.
Более того, все стандартные методы для экземпляров Array умеют работать только с целочисленными индексами. Если вы будете использовать фильтрацию или преобразования, то методы filter() и map() будут пропускать строковые индексы.
let m3 = [10, 20, 30] m3.s = 40 m3.f = 50 m3.map(i=>i/10) m3.filter(i=>i>20)
Пример работы:
Ссылки
JavaScript | Как узнать длину массива?
JavaScript | Как изменить длину массива?
JavaScript | Как увеличить длину массива?
JavaScript | Как уменьшить длину массива?
JavaScript | Объявление массива через квадратные скобки []
ECMAScript — Living Standard — https://tc39.es/ecma262/#sec-array-objects
ECMAScript — Living Standard — https://tc39.es/ecma262/#sec-properties-of-array-instances-length