Skip to main content

Плаский масив з багатовимірного

Приклад:

javascript
const arr = [1, [2, 3], [4, [5, 6]]];

Хочемо отримати -> [1, 2, 3, 4, 5, 6]


1. Найпростіший спосіб - .flat() (ES2019+)

javascript
const flattened = arr.flat(); console.log(flattened); // [1, 2, 3, 4, [5, 6]]

За замовчуванням flat() "сплющує" тільки один рівень вкладеності.


2. Вказати глибину сплющення

javascript
const deeplyFlattened = arr.flat(2); console.log(deeplyFlattened); // [1, 2, 3, 4, 5, 6]
  • flat(1) -> один рівень
  • flat(2) -> два рівні
  • flat(Infinity) -> повністю, незалежно від глибини

Приклад:

javascript
const nested = [1, [2, [3, [4]]]]; console.log(nested.flat(Infinity)); // [1, 2, 3, 4]

Це найзручніший і найсучасніший спосіб "сплющити" масив.


3. Альтернатива - рекурсія (старий спосіб, до flat)

javascript
function flatten(arr) { return arr.reduce( (acc, val) => acc.concat(Array.isArray(val) ? flatten(val) : val), [] ); } console.log(flatten([1, [2, [3, 4]], 5])); // [1, 2, 3, 4, 5]
  • Перевіряємо кожен елемент: якщо масив -> викликаємо flatten рекурсивно.
  • Якщо ні -> додаємо в результат.

4. Через toString() (тільки для чисел/рядків)

javascript
[1, [2, [3, 4]]].toString().split(','); // ["1", "2", "3", "4"]

Працює, тільки якщо немає об'єктів або null, тому що все перетворюється на рядки.


5. Через flatMap() (для комбінування + flatten)

javascript
const arr = [1, 2, [3, 4]]; const result = arr.flatMap(x => (Array.isArray(x) ? x : [x])); console.log(result); // [1, 2, 3, 4]

flatMap() одночасно перетворює елементи і сплющує один рівень.


Коротко:

СпосібПрацює зГлибинаМутуєСучасність
arr.flat()масив1 за замовчуваннямНіТак (ES2019+)
arr.flat(Infinity)багатовимірнийвсі рівніНіТак
Рекурсіямасивбудь-якіНіТак (універсально)
flatMap()масив1 рівеньНіТак
toString().split()числа, рядкивсі рівніНіобмежено

Підсумок: Щоб "сплющити" масив:

javascript
const flat = arr.flat(Infinity);
  • це коротко, безпечно і зрозуміло.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.