Recursão e Estruturas Multidimensionais em JavaScript
Dado um array multidimensional de nível arbitrário de aninhamento, por exemplo, como este:
let 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:
function 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:
function 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:
function 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]]]]);
Dado um objeto multidimensional de nível arbitrário de aninhamento, por exemplo, como este:
{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.
Dado um array multidimensional de nível arbitrário de aninhamento, por exemplo, como este:
[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:
[1, 2, 7, 8, 3, 4, 5, 6, 7]