Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до ««щільний» і «розріджений» масив». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)**Щільний масив (dense array)** - масив, у якому всі індекси від `0` до `length - 1` зайняті елементами, без пропусків. **Розріджений масив (sparse array)** - масив, у якому частина індексів відсутня ("діри"), хоча `length` враховує й пропущені позиції. **Ключове:** розріджені масиви працюють повільніше, гірше оптимізуються рушієм V8, а методи `forEach()`, `map()`, `filter()`, `reduce()` пропускають у них порожні елементи.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## Визначення ### **Щільний масив (dense array)** Масив, у якому **всі індекси зайняті елементами**: від `0` до `length - 1`. Тобто: - немає "пропущених" індексів (дір), - кожен індекс справді існує в об'єкті. ```javascript const dense = [10, 20, 30]; ``` Тут: - індекси: `0, 1, 2` - `dense.length === 3` - `0 in dense` → `true`, `1 in dense` → `true`, `2 in dense` → `true` --- ### **Розріджений масив (sparse array)** Масив, у якому **деякі індекси відсутні**: у ньому є "діри". ```javascript const sparse = [10, , 30]; console.log(sparse); // [10, <1 empty item>, 30] ``` Тут: - індекс `1` **не існує** (`1 in sparse` → `false`) - `sparse.length === 3`, але елементів насправді лише 2 --- ## Як з'являються "діри" 1. При **використанні** `delete`: ```javascript const arr = [1, 2, 3]; delete arr[1]; console.log(arr); // [1, <1 empty item>, 3] ``` 2. При **вказанні пропуску** у літералі: ```javascript const arr = [1, , 3]; ``` 3. При **збільшенні** `length` вручну: ```javascript const arr = [1, 2]; arr.length = 5; console.log(arr); // [1, 2, <3 empty items>] ``` --- ## Поведінка при переборі | Метод | Щільний масив | Розріджений масив | |---|---|---| | `for` | проходить по всіх індексах | проходить по всіх індексах | | `for...of` | проходить по всіх значеннях | пропускає порожні | | `forEach()` | проходить по кожному елементу | пропускає "порожні" | | `map()`, `filter()`, `reduce()` | пропускають "порожні" | | | `in` | перевіряє наявність індексу | поверне `false` для дір | | `Object.keys()` | покаже лише наявні індекси | пропустить порожні | --- ## Приклад порівняння: ```javascript const dense = [1, 2, 3]; const sparse = [1, , 3]; dense.forEach(v => console.log(v)); // 1, 2, 3 sparse.forEach(v => console.log(v)); // 1, 3 (індекс 1 пропущено) console.log(Object.keys(dense)); // ["0", "1", "2"] console.log(Object.keys(sparse)); // ["0", "2"] ``` --- ## Вплив на продуктивність Розріджені масиви: - **працюють повільніше**, - **гірше оптимізуються рушієм V8**, - і часто поводяться "дивно" під час ітерації. > Тому в реальних проєктах краще **уникати "дірявих" масивів** і використовувати `null` або `undefined` як явні значення "порожнечі". --- ## Коротко: | Тип масиву | Опис | Приклад | Поведінка | |---|---|---|---| | **Щільний** | Усі індекси зайняті | `[1, 2, 3]` | Передбачуване, швидке | | **Розріджений** | Є пропущені індекси | `[1, , 3]` | Методи пропускають порожні, повільніше |Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.