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]