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
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; } } }x no está definido porque findNeedle() no return un resultado, sino que asigna uno a la variable de result .