Tengo una función que toma un objeto literal como entrada. como resultado, debería devolver 2 matrices de objetos.
Es una función recursiva, por lo que el retorno ocurre en el n-ésimo ciclo de recursión con los siguientes datos:
//code const filterObject = (object, array1 = null, array2 = null) => { let a1 = array1 === null?[]: array1; //array1 is passed as a part of recursion and when recursed is not null let a2 = array2 === null?[]: array2; //same here ... //some filtering and object manipulation to create **composedObject** ... if (condition x is met){ a1.push(composedObject) } if( condition y is met ){ a2.push(composedObject) ... //filtering out parts of initial object that were used //what is left is assembled into **untreatedObject** ... if (there are still parts of the initial object that are left untreated){ filterObject(untreatedObject, a1, a2); //here recursion happens and we pass these arrays there as well as they will continue to be populated } else if (everything is filtered and objects are ready){ console.log(a1) //values are present and correct console.log(a2) //values are present and correct return { a: a1, b: a2}; } /* where array1:[ { a: 1, b: 'skdfhkdj', c:[ { index:0, code :'red' }, { index:1, code :'redcwrg' } ] } ], array2:[ { a: 1, b: 'skdfhkdj', c:[ { index:2, code :'redaxac' }, { index:3, code :'reddd' } ] } ] */ const result = filterObject(object, null,null); console.log(result); //**gives undefined**. PREGUNTA Cuando trato de llamar a esta función const result = filterObject(object, null,null) (null,null aquí están los valores iniciales para las matrices. Se asignan a [] al comienzo de la función y luego, cuando ocurre la recursión, se envían también para que se puedan alterar nuevas matrices)
y cuando lo registro, el resultado es del tipo "indefinido" y estoy seguro de que la función tiene los objetos en la matriz antes de que ocurra el return
Entonces, ¿dónde puedo estar equivocado?
Gracias por adelantado
Falta una cosa de importación: su código no devuelve el objeto devuelto por una llamada recursiva. Solo tiene return para el caso base. Su código no realiza la devolución del otro caso recursivo.
Así que para dejarlo claro, necesitas
return filterObject(untreatedObject, a1, a2);