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

119
Vistas
JS recursion returns undefined

I would like to get back the result as a return value from the recursion, but I get 'undefined'. I read through all the related solutions (see ***) here, but somehow my example doesn't work. If I'm using a global variable then I can get the result otherwise the return values is 'undefined'.

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}

How can I fix this to get back the result in return value ?

Thanks in advance.

Csaba

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

0

Don't use forEach, but a for..of loop. That way you can return something without being trapped within a callback function.

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 is undefined because findNeedle() doesn't return a result, it assigns one instead to the result variable.

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