Rekursie en multidimensionele strukture in JavaScript

Gegee 'n multidimensionele skikking van arbitrêre vlak van inneembaarheid, byvoorbeeld so een:

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

Soos jy kan sien, het hierdie skikking 'n komplekse struktuur, en dit word veronderstel dat hierdie struktuur arbitrêr kan wees en die vlakke van inneembaarheid kan willekeurig diep wees.

Kom ons sê ons wil alle primitiewe (d.w.s. nie-skikkings) elemente van ons skikking in die konsole uitvoer. In hierdie geval sal ons nie eenvoudig lusse kan gebruik om so 'n skikking deur te loop nie, aangesien die skikking 'n onreëlmatige struktuur het en 'n onbekende vlak van inneembaarheid.

Maar om so 'n skikking deur te loop, sal rekursie baie gerieflik wees.

Laat ons eers 'n funksie maak wat ons skikking as 'n parameter neem, en binne die funksie maak ons 'n lus om ons skikking deur te loop:

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

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

Die lus wat ons gemaak het, sal slegs die elemente van die hoofskikking deurloop. Dit wil sê, eers sal dit 1 uitvoer, dan [2, 7, 8], en dan [3, 4, [5, [6, 7]].

Laat ons nou in die lus primitiewe elemente en skikking-elemente onderskei:

javascriptfunction func(arr) {
  for (let elem of arr) {
    if (typeof elem == 'object') {
      // element is 'n skikking
    } else {
      // element is 'n primitief
      console.log(elem);
    }
  }
}

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

En laat ons dit nou so maak dat as ons element 'n skikking is, die funksie haarself aanroep, deur hierdie skikking as parameter deur te gee:

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

Gegee 'n multidimensionele objek van arbitrêre vlak van inneembaarheid, byvoorbeeld so een:

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

Gebruik rekursie om alle primitiewe elemente van hierdie objek in die konsole uit te voer.

Задание 2

Gegee 'n multidimensionele skikking van arbitrêre vlak van inneembaarheid, byvoorbeeld so een:

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

Skryf kode wat ons multidimensionele skikking na 'n eendimensionele skikking sal afplat. Vir die bostaande skikking sal dit so lyk:

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