0

As the title says, I am trying to take an array of numbers, and then return the sum of all the even numbers in the array squared.

I can get my function to return the sum of all the even numbers in a given array, but cannot get it to square the sum of the even numbers.

Here is what I have so far:

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

const squareEvenNumbers = (numStr) => {
  let sum = 0;
  for (let i = 0; i < numStr.length; i++) {
    if (numStr[i] % 2 === 0) {
      sum = Math.pow(sum + numStr[i], 2);
    }
  }
  return sum
}

console.log(squareEvenNumbers(numStr));

1
  • 1
    try sum += Math.pow(numStr[i], 2) :D Commented Dec 29, 2019 at 23:25

1 Answer 1

2

You need to raise only the current item in the array to the power of 2, not the whole sum:

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

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

Or, more concisely:

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

const squareEvenNumbers = arr => arr
  .filter(num => num % 2 === 0)
  .reduce((a, num) => a + num ** 2, 0);
 
console.log(squareEvenNumbers(numStr));

Or, to only iterate over the array once:

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

const squareEvenNumbers = arr => arr
  .reduce((a, num) => a + (num % 2 === 0 && num ** 2), 0);
 
console.log(squareEvenNumbers(numStr));

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.