Rekurze a multidimenzionální struktury v JavaScriptu
Je dáno multidimenzionální pole libovolné úrovně vnoření, například takové:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Jak vidíte, toto pole má složitou strukturu a předpokládá se, že tato struktura může být libovolná a úrovně vnoření mohou být libovolně hluboké.
Předpokládejme, že chceme do konzole vypsat všechny primitivní (tj. ne pole) prvky našeho pole. V tomto případě pro průchod takového pole jednoduše nemůžeme použít cykly, protože pole má nepravidelnou strukturu a neznámou úroveň vnoření.
Naopak pro průchod takového pole bude velmi výhodné použít rekurzi.
Nejprve vytvoříme funkci, do které parametrem budeme předávat naše pole, a ve funkci vytvoříme cyklus pro průchod našeho pole:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Cyklus, který jsme vytvořili, bude procházet pouze
prvky hlavního pole. To znamená, že nejprve
vypíše 1, potom [2, 7, 8],
a pak [3, 4, [5, [6, 7]].
Nyní v cyklu oddělujme prvky-primitivity a prvky-pole:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// prvek - pole
} else {
// prvek - primitiv
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
A nyní udělejme to, že pokud je náš prvek pole, funkce zavolá sama sebe, a předá parametrem toto pole:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
func(elem);
} else {
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Je dán multidimenzionální objekt libovolné úrovně vnoření, například takový:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Pomocí rekurze vypište všechny primitivní prvky tohoto objektu do konzole.
Je dáno multidimenzionální pole libovolné úrovně vnoření, například takové:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Napište kód, který rozbalí naše multidimenzionální pole do jednorozměrného. Pro výše uvedené pole to bude vypadat takto:
[1, 2, 7, 8, 3, 4, 5, 6, 7]