cómo obtener la suma de impares, incluso usando el método de reducción, lo hice como se muestra en el código a continuación, pero devolví indefinido, @ js-beginner
// código a continuación
nums= [1,2,3,4,5,6,7,8,9] function getOddEvenSum(numbers){ let{even,odd} = numbers.reduce((acc, cuu) => cuu%2 === 0?acc.even + cuu:acc.odd+cuu,{even:0, odd:0}) return {even, odd} } console.log(getOddEvenSum(nums)// salida que obtengo a continuación
{even:undefined, odd:undefined}Puedes usar Array.prototype.reduce así:
const nums = [1, 2, 3, 4, 5, 6, 7, 8, 9]; const [odds, evens] = nums.reduce( ([odds, evens], cur) => cur % 2 === 0 ? [odds, evens + cur] : [odds + cur, evens], [0, 0] ); console.log(odds); console.log(evens);El valor que devuelva de su devolución de llamada reducida será el valor de acc en la próxima invocación/iteración de su matriz de números. Actualmente, su acc comienza como un objeto, pero como solo está devolviendo un número de su primera iteración, todas las iteraciones posteriores usarán un número como cuenta, que no .odd propiedades acc o .even . En su lugar, podría devolver un nuevo objeto con propiedades pares/impares actualizadas para que acc permanezca como un objeto en todas las iteraciones:
const nums = [1,2,3,4,5,6,7,8,9]; function getOddEven(numbers){ return numbers.reduce((acc, cuu) => cuu % 2 === 0 ? {odd: acc.odd, even: acc.even + cuu} : {even: acc.even, odd: acc.odd+cuu}, {even:0, odd:0}); } console.log(getOddEven(nums));No es así como funciona la sintaxis de reduce . Una posible implementación:
function getOddEven(nums) { return nums.reduce( ({odd, even}, num) => num % 2 === 0 ? {odd, even: even + num} : {odd: odd + num, even}, {odd: 0, even: 0}, ); }Yo diría que esto no está muy claro. Dado que el rendimiento probablemente no sea crítico, una alternativa más clara sería:
function getOddEven(nums) { return { odd: nums.filter(num => num % 2 == 1).reduce((acc, num) => acc + num), even: nums.filter(num => num % 2 == 0).reduce((acc, num) => acc + num), }; }