Rekurzia a multidimenzionálne štruktúry v JavaScripte

Dané je pole ľubovoľnej úrovne multidimenzionality a vnorenia, napríklad takéto:

javascriptlet 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:

javascriptfunction 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:

javascriptfunction 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:

javascriptfunction 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]]]]);
Задание 1

Daný je multidimenzionálny objekt ľubovoľnej úrovne vnorenia, napríklad takýto:

javascript{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.

Задание 2

Dané je multidimenzionálne pole ľubovoľnej úrovne vnorenia, napríklad takýto:

javascript[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:

javascript[1, 2, 7, 8, 3, 4, 5, 6, 7]