Rekursija un daudzdimensiju struktūras JavaScript

Dots daudzdimensiju masīvs ar patvaļīgu līmeņu ligzdotību, piemēram, šāds:

javascriptlet arr = [
  1,
  [
    2, 7, 8
  ],
  [
    3, 4, [5, [6, 7]],
  ]
];

Kā jūs redzat, šim masīvam ir sarežģīta struktūra, un tiek pieņemts, ka šī struktūra var būt patvaļīga un līmeņu ligzdotība var būt patvaļīgi dziļa.

Pieņemsim, ka mēs vēlamies izvadīt konsolē visus primitīvos (tas ir, ne masīvus) elementus no mūsu masīva. Šajā gadījumā, lai apstaigātu šādu masīvu, mums vienkārši neizdosies izmantot ciklus, jo masīvam ir neregulāra struktūra un nezināms ligzdotības līmenis.

Bet, lai apstaigātu šādu masīvu, ļoti ērti varēs izmantot rekursiju.

Sākumā izveidosim funkciju, kuras parametrā padodam mūsu masīvu, un funkcijā izveidosim ciklu mūsu masīva apstaigāšanai:

javascriptfunction func(arr) {
  for (let elem of arr) {
    console.log(elem);
  }
}

func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);

Mūsu izveidotais cikls apstaigās tikai pamatmasīva elementus. Tas ir, sākumā tas izvadīs 1, tad [2, 7, 8], un pēc tam [3, 4, [5, [6, 7]].

Tagad cilpā sāksim atšķirt primitīvos elementus un masīvu elementus:

javascriptfunction func(arr) {
  for (let elem of arr) {
    if (typeof elem == 'object') {
      // elements - masīvs
    } else {
      // elements - primitīvs
      console.log(elem);
    }
  }
}

func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);

Un tagad panāksim, ka, ja mūsu elements ir masīvs, funkcija izsaucas pati sevi, padodot kā parametru šo masīvu:

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

Dots daudzdimensiju objekts ar patvaļīgu līmeņu ligzdotību, piemēram, šāds:

javascript{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}

Izmantojot rekursiju, izvadiet visus primitīvos elementus no šī objekta konsolē.

Задание 2

Dots daudzdimensiju masīvs ar patvaļīgu līmeņu ligzdotību, piemēram, šāds:

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

Uzrakstiet kodu, kas pārvērtīs mūsu daudzdimensiju masīvu par viendimensiju. Dotajam masīvam tas izskatīsies šādi:

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