Recursão e Estruturas Multidimensionais em JavaScript

Dado um array multidimensional de nível arbitrário de aninhamento, por exemplo, como este:

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

Como você pode ver, este array tem uma estrutura complexa, e assume-se que essa estrutura pode ser arbitrária e os níveis de aninhamento podem ser tão profundos quanto necessário.

Suponha que queremos imprimir no console todos os elementos primitivos (ou seja, que não são arrays) do nosso array. Neste caso, para iterar sobre esse array, simplesmente não conseguiremos usar loops, pois o array tem uma estrutura irregular e um nível de aninhamento desconhecido.

No entanto, para iterar sobre esse array, será muito conveniente usar recursão.

Para começar, vamos criar uma função que receberá nosso array como parâmetro, e dentro da função vamos fazer um loop para iterar nosso array:

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

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

O loop que criamos irá iterar apenas sobre os elementos do array principal. Ou seja, primeiro ele imprimirá 1, depois [2, 7, 8], e depois [3, 4, [5, [6, 7]].

Agora, vamos separar no loop os elementos primitivos e os elementos que são arrays:

javascriptfunction func(arr) {
  for (let elem of arr) {
    if (typeof elem == 'object') {
      // elemento é um array
    } else {
      // elemento é um primitivo
      console.log(elem);
    }
  }
}

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

E agora, vamos fazer com que, se nosso elemento for um array, a função chame a si mesma, passando esse array como parâmetro:

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

Dado um objeto multidimensional de nível arbitrário de aninhamento, por exemplo, como este:

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

Usando recursão, imprima todos os elementos primitivos deste objeto no console.

Задание 2

Dado um array multidimensional de nível arbitrário de aninhamento, por exemplo, como este:

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

Escreva um código que transforme nosso array multidimensional em um array unidimensional. Para o array acima, ficará assim:

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