La solución que estoy buscando: mi función necesita devolver la suma de todos los números pares en mi matriz. La respuesta esperada es 30.

El problema que tengo: la respuesta que está devolviendo es 25.

let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const sumEvens = (numStr) => {
  let sum = 0;
  for (let i = 0; i < numStr.length; i++) {
    if (i % 2 === 0){ 
    sum = sum + numStr[i];
    }
  }
  return sum;
}
 
console.log(sumEvens(numStr));

Cambié la función para empujar a una matriz de suma y devolví la matriz de suma para encontrar la razón por la que devuelve 25 es porque está haciendo una matriz de números impares en lugar de pares.

let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const sumEvens = (numStr) => {
  let sum = [ ];
  for (let i = 0; i < numStr.length; i++) {
    if (i % 2 === 0){ 
    sum.push(numStr[i]);
    }
  }
  return sum;
}
 
console.log(sumEvens(numStr));

La única forma en que puedo obtener la salida correcta de 30 es hacer mi declaración if if (i % 2 !== 0), pero sé que eso significa agregar solo si el número en la matriz NO es par.

Siento que estoy tan cerca, pero me falta una cosa menor. Las otras publicaciones SO y MDN no me ayudaron.

1
daniela-idara 11 may. 2019 a las 03:04

4 respuestas

La mejor respuesta

Con

if (i % 2 === 0){ 

Está comprobando si el índice que se está iterando es par. Entonces, terminarás sumando numStr[0], numStr[2], etc. Verifica el valor en ese índice en su lugar:

if (numStr[i] % 2 === 0) {
let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const sumEvens = (numStr) => {
  let sum = 0;
  for (let i = 0; i < numStr.length; i++) {
    if (numStr[i] % 2 === 0) {
    sum = sum + numStr[i];
    }
  }
  return sum;
}
 
console.log(sumEvens(numStr));
4
CertainPerformance 11 may. 2019 a las 00:06

Usar filtro y reducir.

let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

let sum = numStr.filter(i => i%2 ===0).reduce((a,v) => a += v);

console.log(sum);
2
Bibberty 11 may. 2019 a las 00:12

Utilice filter con reduce en su lugar:

let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

const sumEvens = arr => arr.filter(e => !(e % 2)).reduce((a, b) => a + b);

console.log(sumEvens(numStr));

El problema con su código actual es que estaba revisando el índice, no el elemento.

2
Jack Bashford 11 may. 2019 a las 00:06

Puedes usar la reducción de JavaScript

let numStr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

function getSum(total, num) {
  return total + (num%2===0?num:0);
}
var my_sum = numStr.reduce(getSum, 0);

console.log(my_sum)
1
Amir B 11 may. 2019 a las 00:07