Rekurzia a multidimenzionálne štruktúry v JavaScripte
Dané je pole ľubovoľnej úrovne multidimenzionality a vnorenia, napríklad takéto:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Ako vidíte, toto pole má zložitú štruktúru, pričom sa predpokladá, že táto štruktúra môže byť ľubovoľná a úrovne vnorenia môžu byť ľubovoľne hlboko.
Povedzme, že chceme do konzoly vypísať všetky primitívne (teda nie polia) elementy nášho poľa. V tomto prípade na prechod takéhoto poľa jednoducho nemôžeme použiť cykly, pretože pole má nepravidelnú štruktúru a neznámu úroveň vnorenia.
Na prechod takéhoto poľa je však veľmi vhodné použiť rekurziu.
Na začiatok vytvorme funkciu, do ktorej ako parameter budeme odovzdávať naše pole, a vo funkcii urobme cyklus na prechod nášho poľa:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Cyklus, ktorý sme urobili, bude prechádzať iba
elementy hlavného poľa. To znamená, že najprv
vypíše 1, potom [2, 7, 8],
a potom [3, 4, [5, [6, 7]].
Teraz v cykle rozdeľme elementy-primitíva a elementy-polia:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// element - pole
} else {
// element - primitívum
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
A teraz urobme to, aby ak je náš element - pole, funkcia zavolala samu seba, pričom odovzdá ako parameter 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]]]]);
Daný je multidimenzionálny objekt ľubovoľnej úrovne vnorenia, napríklad takýto:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Pomocou rekurzie vypíšte všetky primitívne elementy tohto objektu do konzoly.
Dané je multidimenzionálne pole ľubovoľnej úrovne vnorenia, napríklad takýto:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Napíšte kód, ktorý rozbalí naše multidimenzionálne pole na jednorozmerné. Pre vyššie uvedené pole to bude vyzerať takto:
[1, 2, 7, 8, 3, 4, 5, 6, 7]