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]