Αναδρομή και Πολυδιάστατες Δομές στο JavaScript
Δίνεται ένας πολυδιάστατος πίνακας αυθαίρετου επιπέδου ένθεσης, για παράδειγμα, όπως ο ακόλουθος:
let arr = [
1,
[
2, 7, 8
],
[
3, 4, [5, [6, 7]],
]
];
Όπως βλέπετε, αυτός ο πίνακας έχει μια σύνθετη δομή, και υποτίθεται ότι αυτή η δομή μπορεί να είναι αυθαίρετη και τα επίπεδα ένθεσης μπορεί να είναι όσο βαθιά θέλετε.
Ας υποθέσουμε ότι θέλουμε να τυπώσουμε στην κονσόλα όλα τα πρωτόγονα (δηλαδή, μη πίνακες) στοιχεία του πίνακα μας. Σε αυτήν την περίπτωση, για την επανάληψη ενός τέτοιου πίνακα απλά δεν θα μπορέσουμε να χρησιμοποιήσουμε βρόχους, καθώς ο πίνακας έχει μια ακανόνιστη δομή και άγνωστο βάθος ενθέτου.
Ωστόσο, για την επανάληψη ενός τέτοιου πίνακα θα είναι πολύ βολικό να χρησιμοποιήσουμε αναδρομή.
Αρχικά, ας φτιάξουμε μια συνάρτηση, στην οποία ως παράμετρο θα περνάμε τον πίνακα μας, και μέσα στη συνάρτηση θα φτιάξουμε έναν βρόχο για την επανάληψη του πίνακα μας:
function func(arr) {
for (let elem of arr) {
console.log(elem);
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Ο βρόχος που φτιάξαμε θα επαναλαμβάνει μόνο
τα στοιχεία του κύριου πίνακα. Δηλαδή, αρχικά
θα εμφανίσει 1, μετά [2, 7, 8],
και μετά [3, 4, [5, [6, 7]].
Τώρα ας ξεχωρίσουμε στον βρόχο τα πρωτόγονα στοιχεία και τα στοιχεία-πίνακες:
function func(arr) {
for (let elem of arr) {
if (typeof elem == 'object') {
// στοιχείο - πίνακας
} else {
// στοιχείο - πρωτόγονο
console.log(elem);
}
}
}
func([1, [2, 7, 8], [3, 4, [5, [6, 7]]]]);
Και τώρα ας κάνουμε έτσι ώστε, εάν το στοιχείο μας είναι πίνακας, η συνάρτηση να καλεί τον εαυτό της, περνώντας ως παράμετρο αυτόν τον πίνακα:
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]]]]);
Δίνεται ένα πολυδιάστατο αντικείμενο αυθαίρετου επιπέδου ένθεσης, για παράδειγμα, όπως το ακόλουθο:
{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}
Χρησιμοποιώντας αναδρομή, εμφανίστε όλα τα πρωτόγονα στοιχεία αυτού του αντικειμένου στην κονσόλα.
Δίνεται ένας πολυδιάστατος πίνακας αυθαίρετου επιπέδου ένθεσης, για παράδειγμα, όπως ο ακόλουθος:
[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]
Γράψτε κώδικα που θα μετατρέψει τον πολυδιάστατο πίνακα μας σε μονοδιάστατο. Για τον παραπάνω πίνακα αυτό θα φαίνεται ως εξής:
[1, 2, 7, 8, 3, 4, 5, 6, 7]