Tengo problemas para convertir una lista de objetos en una matriz. En la segunda función listToArray, estoy tratando de recorrer las propiedades y verificar si el valor es un número o no. En el caso de un número, simplemente lo empujo a la matriz vacía, pero si no es así, estoy probando la recursividad con una propiedad como argumento. Obtengo una matriz vacía, ayúdenme por favor. NOTA: No hay soluciones de fuerza bruta, por favor. Como, list.value y list.rest. ¡Gracias!
function arrayToList(array) { let list = null; for (let i = array.length - 1; i >= 0; i--) { list = {value: array[i], rest: list}; } return list; } function listToArray(list) { let array = []; for (let i in list) { if(typeof list[i] == "number") { array.push(list[i]); } else if(typeof list[i] != "number") { return listToArray(list[i]); } } return array; } console.log(arrayToList([10, 20])); Result: {value: 10, rest: {value: 20, rest: null}} console.log(listToArray(arrayToList([10, 20, 30]))); Result: []Cuando tu lo hagas
return listToArray(list[i]);está ignorando el valor de la iteración actual y solo está devolviendo el valor en la estructura anidada. También está iterando sobre todas las propiedades innecesariamente (y regresando antes de pasar a la segunda) en lugar de hacer referencia a las 2 propiedades exactas que existirán.
Extraiga la propiedad de value , extraiga el valor recursivo si existe y devuelva una matriz de esos dos juntos.
Si el argumento puede no ser un objeto, verifíquelo también antes de extraer valores de él.
function arrayToList(array) { let list = null; for (let i = array.length - 1; i >= 0; i--) { list = {value: array[i], rest: list}; } return list; } function listToArray(list) { if (!list) return []; const { value, rest } = list; if (!rest) return [value]; return [value, ...listToArray(rest)]; } console.log(listToArray(arrayToList([10, 20, 30])));o, con un argumento recursivo predeterminado en lugar de propagación:
function arrayToList(array) { let list = null; for (let i = array.length - 1; i >= 0; i--) { list = {value: array[i], rest: list}; } return list; } function listToArray(list, array = []) { if (!list) return array; array.push(list.value); return listToArray(list.rest, array); } console.log(listToArray(arrayToList([10, 20, 30])));