Rekursion och multidimensionella strukturer i JavaScript
Givet en multidimensionell array av godtycklig nivå av kapsling, till exempel sådan här:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Som du kan se har denna array en komplex struktur, och det antas att denna struktur kan vara godtycklig och nivåerna av kapsling kan vara hur djupt som helst.
Låt oss säga att vi vill skriva ut alla primitiva (dvs inte arrayer) element i vår array till konsolen. I det här fallet kommer vi helt enkelt inte att kunna använda loopar för att iterera över en sådan array, eftersom arrayen har en oregelbunden struktur och en okänd kapsningsnivå.
Däremot kommer rekursion att vara mycket bekväm för att iterera över en sådan array.
Låt oss först skapa en funktion där vi skickar vår array som en parameter, och i funktionen skapar vi en loop för att iterera över vår array:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Loopen vi skapat kommer bara att iterera över
elementen i huvudarrayen. Det vill säga, först
kommer den att skriva ut 1, sedan [2, 7, 8],
och sedan [3, 4, [5, [6, 7]].
Låt oss nu i loopen särskilja primitive element och arrayelement:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// elementet är en array
} else {
// elementet är primitivt
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Och låt oss nu göra så att om vårt element är en array, anropar funktionen sig själv, och skickar denna array 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]]]]);
Givet ett multidimensionellt objekt av godtycklig nivå av kapsling, till exempel sådan här:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Använd rekursion för att skriva ut alla primitiva element i detta objekt till konsolen.
Givet en multidimensionell array av godtycklig nivå av kapsling, till exempel sådan här:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Skriv kod som plattar ut vår multidimensionella array till en endimensionell array. För arrayen ovan kommer det att se ut så här:
[1, 2, 7, 8, 3, 4, 5, 6, 7]