Recursie și structuri multidimensionale în JavaScript
Se dă un array multidimensional cu un nivel arbitrar de imbricare, de exemplu, acesta:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
După cum vedeți, acest array are o structură complexă, iar se presupune că această structură poate fi arbitrară și nivelurile de imbricare pot fi oricât de adânci.
Să presupunem că vrem să afișăm în consolă toate elementele primitive (adică nu array-uri) ale array-ului nostru. În acest caz, pentru a parcurge un astfel de array nu vom putea folosi bucle, deoarece array-ul are o structură neregulată și un nivel de imbricare necunoscut.
În schimb, pentru parcurgerea unui astfel de array este foarte convenabil să folosim recursia.
Pentru început, să facem o funcție care ia ca parametru array-ul nostru, iar în funcție să facem o buclă pentru parcurgerea array-ului:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Bucla pe care am făcut-o va parcurge doar
elementele array-ului principal. Adică la început
va afișa 1, apoi [2, 7, 8],
și apoi [3, 4, [5, [6, 7]].
Acum, să separăm în buclă elementele-primitive de elementele-array-uri:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// elementul este un array
} else {
// elementul este un primitiv
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Și acum, să facem astfel încât dacă elementul nostru este un array, funcția să se autoapeleze, transmitând ca parametru acel array:
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]]]]);
Se dă un obiect multidimensional cu un nivel arbitrar de imbricare, de exemplu, acesta:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Folosind recursia, afișați toate elementele primitive ale acestui obiect în consolă.
Se dă un array multidimensional cu un nivel arbitrar de imbricare, de exemplu, acesta:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Scrieți un cod care va transforma array-ul nostru multidimensional într-unul unidimensional. Pentru array-ul de mai sus va arăta astfel:
[1, 2, 7, 8, 3, 4, 5, 6, 7]