JavaScript | Как узнать длину массива без пустых элементов?

JavaScript | Как узнать длину массива без пустых элементов?

Есть массив с пустыми элементами (empty):

var massiv = [1,,2,,,3,,,,4]
Массив с пустыми элементами - JavaScript
Массив с пустыми элементами — JavaScript

Задача

Мы хотим узнать длину этого массива без пустых элементов.

 

В чём проблема?

У любого массива в JavaScript есть свойство «length«. Мы всегда можем обратиться к этому свойству и узнать длину массива. Давайте так и сделаем:

massiv.length

В ответ получим число 10.

Длина массива с пустыми элементами - JavaScript
Длина массива с пустыми элементами — JavaScript

Но это число не соответствует реальности т. к. «живых» элементов в массиве всего 4. Как быть?

 

Решение

Мы должны произвести фильтрацию оригинального массива по условию, что значение элемента массива не определено — является undefined.

i != undefined

Вызываем метод filter() с этим условием:

massiv.filter(i => i != undefined)

Фильтр пробежится по всем элементам массива и вернёт только те, которые определены.

Отобрали существующие элементы из массива - JavaScript
Отобрали существующие элементы из массива — JavaScript

Новый массив будет полностью заполнен элементами от начала до конца. У нового массива можно узнать длину.

massiv.filter(i => i != undefined).length
Длина отфильтрованного массива - JavaScript
Длина отфильтрованного массива — JavaScript

Получим длину 4. Эта длина как раз и будет количеством «живых» элементов в массиве.

 

Информационные ссылки

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

Стандарт ECMAScript — Раздел «23.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )» — https://tc39.es/ecma262/#sec-array.prototype.filter