Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

123
Vistas
La recursión JS devuelve indefinido

Me gustaría recuperar el resultado como un valor de retorno de la recursividad, pero obtengo 'indefinido'. Leí todas las soluciones relacionadas (ver ***) aquí, pero de alguna manera mi ejemplo no funciona. Si estoy usando una variable global, puedo obtener el resultado; de lo contrario, los valores de retorno son 'indefinidos'.

https://stackblitz.com/edit/typescript-1b2ktw

 export interface Needle { needles: Needle[]; text: string; } export const Needles: Needle[] = [ { text: 'root', needles: [ { text: 'a', needles: [ { text: 'a1', needles: null }, { text: 'a2', needles: null }, ], }, { text: 'b', needles: null }, ], }, ]; let result; function findNeedle(needles: Needle[], key: string, value: string): any { needles.forEach((x) => { if (x[key] === value) { // return x as Needle; // doesnt work result = x; // works just ugly } if (x.needles) { needles = x.needles; // return findNeedle(needles, key, value); solution *** like this doesnt work also findNeedle(needles, key, value); } }); } console.clear(); let x = findNeedle(Needles, 'text', 'a1'); console.log('x:', x, 'result', result); --- CONSOLE Console was cleared x:undefined, result {text: "a1", needles: null}

¿Cómo puedo arreglar esto para recuperar el resultado en valor de retorno?

Gracias por adelantado.

Csaba

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

No use forEach , sino un bucle for..of . De esa manera, puede return algo sin quedar atrapado dentro de una función de devolución de llamada.

 function findNeedle(needles: Needle[], key: string, value: string): any { for (let x of needles) { if (x[key] === value) return x; if (x.needles) { result = findNeedle(x.needles, key, value); if (result) return result; } } }
about 4 years ago · Juan Pablo Isaza Denunciar

0

x no está definido porque findNeedle() no return un resultado, sino que asigna uno a la variable de result .

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda