Как работает return в рекурсии?
У меня есть рекурсивная функция, задача которой найти поле
findSelectTag(el){
if(el.children.length > 0 && el.children != undefined){
for(let child of el.children){
if(child.tagName == "SELECT"){
console.log(child)
return child;
}else{
this.findSelectTag(child);
}
}
}
}
console.log(child) выдает правильный елемент, но return не возврощает ничего(
Ответы (2 шт):
Автор решения: Aziz Umarov
→ Ссылка
Должно быть 3 return
Первый if без return на else и второй if else тоже
findSelectTag(el){
if(el.children.length > 0 && el.children != undefined){
for(let child of el.children){
if(child.tagName == "SELECT"){
console.log(child);
return child;
}else{
return this.findSelectTag(child);
}
}
}
return null;
}
Исправлено, не хватало продолжения цикла по элементам
findSelectTag(el){
if(el.children.length > 0 && el.children != undefined){
for(let child of el.children){
if(child.tagName == "SELECT"){
console.log(child);
return child;
}else{
if (this.findSelectTag(child)) {
return this.findSelectTag(child);
} else {
continue; // смысла нет но наглядно
}
}
}
}
return null;
}
Автор решения: Igor
→ Ссылка
findSelectTag(el) {
for(let i = 0; el.children && i < el.children.length; i++) {
let child = el.children[i];
if (child.tagName == "SELECT") {
return child;
} else {
let s = this.findSelectTag(child);
if (s) return s;
}
}
return null;
}