Плаский масив з багатовимірного
Приклад:
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() | числа, рядки | всі рівні | Ні | обмежено |
Підсумок: Щоб "сплющити" масив:
javascriptconst flat = arr.flat(Infinity);
- це коротко, безпечно і зрозуміло.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.