JavaScript | Как очистить массив?

JavaScript | Как очистить массив?

Прежде чем очищать массив, ты должен знать, что массивы также являются объектами в JavaScript, как и все остальные элементы языка.

Это значит, что у массивов могут быть не только целочисленные индексы. Массивы могут иметь разные названия ключей. Ключи могут быть отрицательными целыми числами. Ключи могут быть строковыми.

 

Способ № 1 — Очищение массива через присвоение нового пустого массива

Массив можно очистить при помощи присваивания нового значения для его идентификатора привязки (BindingIdentifier).

По своей сути это не очистка как таковая, а просто переназначение «объекта массива» для идентификатора привязки. Вот и всё. Когда на старый «объект массива» пропадёт ссылка в среде выполнения кода, то через некоторое время сборщик мусора не найдёт на него ссылки и просто удалит его из памяти.

Новым значением для старого идентификатора привязки должен быть пустой массив, который:

  • объявлен литерально квадратными скобками или
  • через функцию конструктор Array().
let  m1 = [1, 2, 3, 4]
m1.length // 4

m1 = [] или m1 = Array()
m1.length // 0

Пример работы

Очистили массив при помощи присвоения пустого массива идентификатору привязки в JavaScript
Очистили массив при помощи присвоения пустого массива идентификатору привязки в JavaScript

 

Способ № 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

Пример работы

Создали массив. Три элемента с целочисленными индексами. Два элемента строковые ключи. JavaScript
Создали массив. Три элемента с целочисленными индексами. Два элемента строковые ключи. JavaScript

Кроме целочисленных индексов, в этом массиве есть строковые ключи. Как поведёт себя длина массива? Какие значения будут отображать при её получении и при её установке?

Очистили массив со строковыми ключами через свойство длины в JavaScript
Очистили массив со строковыми ключами через свойство длины в JavaScript

Обратите внимание. Свойство длины работает только по целочисленным индексам и не затрагивает строковые индексы.

Фактически мы имеем 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 | Как увеличить длину массива?

JavaScript | Как уменьшить длину массива?

JavaScript | Массивы (Array)

JavaScript | Объявление массива через квадратные скобки []

 

ECMAScriptLiving Standardhttps://tc39.es/ecma262/#sec-array-objects

ECMAScriptLiving Standardhttps://tc39.es/ecma262/#sec-properties-of-array-instances-length

Свойства конструктора Array

Свойства объекта прототипа Array