რეკურსია და მრავალგანზომილებიანი სტრუქტურები JavaScript-ში

მოცემულია მრავალგანზომილებიანი მასივი თვითნებური დონის ბუდობით, მაგალითად, ასეთი:

javascriptlet arr = [
  1,
  [
    2, 7, 8
  ],
  [
    3, 4, [5, [6, 7]],
  ]
];

როგორც ხედავთ, ამ მასივს აქვს რთული სტრუქტურა, და ვარაუდობენ, რომ ეს სტრუქტურა შეიძლება იყოს თვითნებური და ბუდობის დონეები შეიძლება იყოს ნებისმიერი სიღრმის.

დავუშვათ, გვსურს კონსოლში გამოვიტანოთ ყველა პრიმიტიული (ანუ, არა-მასივები) ელემენტი ჩვენი მასივის. ამ შემთხვევაში, ასეთი მასივის გადასარჩევად ჩვენ უბრალოდ ვერ გამოვიყენებთ ციკლებს, რადგან მასივს აქვს არარეგულარული სტრუქტურა და უცნობი ბუდობის დონე.

მაგრამ ასეთი მასივის გადარჩევისთვის ძალიან მოსახერხებელი იქნება რეკურსიის გამოყენება.

დასაწყისისთვის, შევქმნათ ფუნქცია, რომელშიც პარამეტრად გადავცემთ ჩვენს მასივს, ხოლო ფუნქციაში გავაკეთოთ ციკლი ჩვენი მასივის გადარჩევისთვის:

javascriptfunction 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]].

ახლა მოდით, ციკლში გავყოთ ელემენტები-პრიმიტივები და ელემენტები-მასივები:

javascriptfunction 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]]]]);

ახლა კი მოდით, გავაკეთოთ ისე, რომ თუ ჩვენი ელემენტი არის მასივი, ფუნქცია თავის თავს გამოიძახებდეს, რომელსაც პარამეტრად გადაეცემა ეს მასივი:

javascriptfunction 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]]]]);
Задание 1

მოცემულია მრავალგანზომილებიანი ობიექტი თვითნებური დონის ბუდობით, მაგალითად, ასეთი:

javascript{a: 1, b: {c: 2, d: 3, e: 4}, f: {g: 5, j: 6, k: {l: 7, m: {n: 8, o: 9}}}}

რეკურსიის გამოყენებით გამოიტანეთ ყველა პრიმიტიული ელემენტი ამ ობიექტის კონსოლში.

Задание 2

მოცემულია მრავალგანზომილებიანი მასივი თვითნებური დონის ბუდობით, მაგალითად, ასეთი:

javascript[1, [2, 7, 8], [3, 4, [5, [6, 7]]]]

დაწერეთ კოდი, რომელიც გადაშლის ჩვენს მრავალგანზომილებიან მასივს ერთგანზომილებიანში. ზემოთ მოყვანილი მასივისთვის ეს ასე გამოიყურება:

javascript[1, 2, 7, 8, 3, 4, 5, 6, 7]