Se supone que debo escribir una función que tome una matriz de números y devuelva una cadena. Se supone que la función usa filter, sort AND reduce para devolver una cadena que contiene solo números impares, separados por comas en orden ascendente.
Parece que no puedo hacer que mi método .reduce realmente devuelva nada y mis condiciones if no parecen funcionar correctamente... (por ejemplo, agrega una coma y un espacio después de la salida del último número como este "3 , 17, ")
Aquí está el código que he hecho hasta ahora...
const numSelectString = (numArr) => { // use .filter to select only the odd numbers numArr.filter((num) => num % 2 !== 0) // use. sort to sort the numbers in ascending order .sort((a,b) => ab) // use reduce to create the string and put the commas and spaces in .reduce((acc, next, index) => { if (index+1!==undefined) { return acc = acc + next + ', ';; } else { return acc + next; } },'') } const nums = [17, 34, 3, 12] console.log(numSelectString(nums)) // should log "3, 17"¿Alguien tiene tiempo para ayudarme a resolver mi método de reducción? Traté de pasar el índice para determinar si reduce está iterando en el último elemento para no generar el "," después del último elemento... pero no lo he hecho funcionar... Además, todavía no entiendo ¡Por qué sigo obteniendo "indefinido" como mi salida!
¡Gracias por cualquier ayuda!
Puede reemplazar el cheque simplemente tomando la suma y sin un valor inicial.
const numSelectString = numArr => numArr .filter((num) => num % 2 !== 0) .sort((a, b) => a - b) .reduce( (acc, next, index) => index ? acc + ', ' + next : next, '' ); console.log(numSelectString([17, 34, 3, 12])); console.log(numSelectString([2, 4, 6])); console.log(numSelectString([1, 2]));En lugar de usar index+1!==undefined , prueba esto
const numSelectString = (numArr) => { const numArrLength = numArr.length; const arr = [...numArr]; arr .filter((num) => num % 2 !== 0) .sort((a,b) => a - b) .reduce((acc, next, index) => { if (index < numArrLength - 1) return acc += `${next}, `; else return acc + `${next}`; }, "") return arr; }También se considera una buena práctica no mutar los parámetros.
Otro método
Usar el método .join() lo hace mucho más fácil.
const numSelectString = (numArr) => { const arr = [...numArr] arr .filter((num) => num % 2 !== 0) .sort((a,b) => ab) .join(", "); return arr; }