Rekursion und mehrdimensionale Strukturen in JavaScript
Gegeben ist ein mehrdimensionales Array beliebiger Verschachtelungstiefe, zum Beispiel dieses:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Wie Sie sehen können, hat dieses Array eine komplexe Struktur, wobei davon ausgegangen wird, dass diese Struktur beliebig sein kann und die Verschachtelungsebenen beliebig tief sein können.
Nehmen wir an, wir möchten alle primitiven (das heißt keine Arrays) Elemente unseres Arrays in der Konsole ausgeben. In diesem Fall könnten wir zum Durchlaufen eines solchen Arrays einfach keine Schleifen verwenden, da das Array eine irreguläre Struktur hat und der Verschachtelungsgrad unbekannt ist.
Allerdings eignet sich Rekursion sehr gut, um ein solches Array zu durchlaufen.
Erstellen wir zunächst eine Funktion, der wir unser Array als Parameter übergeben, und in der Funktion erstellen wir eine Schleife zum Durchlaufen unseres Arrays:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Die von uns erstellte Schleife wird nur die
Elemente des Hauptarrays durchlaufen. Das heißt, zuerst
wird sie 1 ausgeben, dann [2, 7, 8],
und dann [3, 4, [5, [6, 7]].
Lassen Sie uns nun in der Schleife primitive Elemente und Array-Elemente unterscheiden:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// Element ist ein Array
} else {
// Element ist ein Primitiv
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Und nun sorgen wir dafür, dass die Funktion, wenn unser Element ein Array ist, sich selbst aufruft und dieses Array als Parameter übergibt:
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]]]]);
Gegeben ist ein mehrdimensionales Objekt beliebiger Verschachtelungstiefe, zum Beispiel dieses:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Geben Sie mithilfe von Rekursion alle primitiven Elemente dieses Objekts in der Konsole aus.
Gegeben ist ein mehrdimensionales Array beliebiger Verschachtelungstiefe, zum Beispiel dieses:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Schreiben Sie Code, der unser mehrdimensionales Array in ein eindimensionales Array umwandelt. Für das oben angeführte Array würde das so aussehen:
[1, 2, 7, 8, 3, 4, 5, 6, 7]