Rekursion og flerdimensjonale strukturer i JavaScript
Det er gitt en flerdimensjonal array med vilkårlig nivå av nesting, for eksempel slik som denne:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Som du kan se, har denne arrayen en kompleks struktur, og det antas at denne strukturen kan være vilkårlig og nivåene av nesting kan være uendelig dype.
La oss si at vi ønsker å skrive ut alle primitive (altså ikke arrays) elementer i arrayen vår til konsollen. I dette tilfellet vil vi rett og slett ikke kunne bruke løkker for å traversere en slik array, fordi arrayen har en uregelmessig struktur og et ukjent nestingsnivå.
Derimot for traversering av en slik array vil det være veldig praktisk å bruke rekursion.
La oss starte med å lage en funksjon, hvor vi parameteren vil være arrayen vår, og i funksjonen lar vi oss lage en løkke for å traversere arrayen vår:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Løkken vi har laget vil bare traversere
elementene i hovedarrayen. Det vil si at først
vil den skrive ut 1, deretter [2, 7, 8],
og deretter [3, 4, [5, [6, 7]].
La oss nå i løkken skille mellom primitive elementer og array-elementer:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// elementet er en array
} else {
// elementet er en primitiv verdi
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Og la oss nå gjøre slik at hvis elementet vårt er en array, kaller funksjonen seg selv, og sender denne arrayen som en parameter:
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]]]]);
Det er gitt et flerdimensjonalt objekt med vilkårlig nivå av nesting, for eksempel slik som dette:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Bruk rekursion for å skrive ut alle primitive elementer i dette objektet til konsollen.
Det er gitt en flerdimensjonal array med vilkårlig nivå av nesting, for eksempel slik som denne:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Skriv kode som vil flate ut vår flerdimensjonale array til en endimensjonal array. For arrayen ovenfor vil det se slik ut:
[1, 2, 7, 8, 3, 4, 5, 6, 7]