Rekursija ir daugiamatės struktūros JavaScript

Duotas daugiamatis masivas savavališko lygio įdėjimo, pavyzdžiui, toks:

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

Kaip matote, šis masivas turi sudėtingą struktūrą, ir daroma prielaida, kad ši struktūra gali būti savavališka, o įdėjimo lygiai gali būti bet kokio gylio.

Tarkime, norime išvesti į konsolę visus primityvius (tai yra ne masyvus) mūsų masivo elementus. Šiuo atveju, norint iteruoti tokį masyvą, mums tiesiog nepavyks naudoti ciklų, nes masivas turi netaisyklingą struktūrą ir nežinomą įdėjimo lygį.

Tačiau tokio masyvo iteravimui labai patogu būtų naudoti rekursiją.

Pirmiausia sukurkime funkciją, į kurią parametru perduosime mūsų masyvą, o funkcijoje sukurkime ciklą mūsų masyvo iteravimui:

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

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

Mūsų sukurtas ciklas iteruos tik per pagrindinio masyvo elementus. Tai yra, iš pradžių jis išves 1, paskui [2, 7, 8], o po to [3, 4, [5, [6, 7]].

Dabar cikle skirkime primityvius elementus ir masyvus:

javascriptfunction func(arr) {
  for (let elem of arr) {
    if (typeof elem == 'object') {
      // elementas - masyvas
    } else {
      // elementas - primityvas
      console.log(elem);
    }
  }
}

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

O dabar padarykime taip, kad jei mūsų elementas - masyvas, funkcija iškviestų pati save, perduodama parametru šį masyvą:

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

Duotas daugiamatis objektas savavališko lygio įdėjimo, pavyzdžiui, toks:

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

Naudodamiesi rekursija, išveskite visus primityvius šio objekto elementus į konsolę.

Задание 2

Duotas daugiamatis masyvas savavališko lygio įdėjimo, pavyzdžiui, toks:

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

Parašykite kodą, kuris išskleis mūsų daugiamatį masyvą į vienmatį. Pateiktam aukščiau masyvui tai atrodys taip:

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