# Fibonacci Sums using Array.filter and Array.reduce

I would like to propose another solution to the Intermediate Algorithm Scripting: Sum All Odd Fibonacci Numbers.

This solution uses `Array.push`, `Array.filter`, and `Array.reduce` to get the needed values.

Solution

``````const sumFibs = (num) => {
const fibonacci = [0,1,1];
while ( fibonacci[fibonacci.length - 1] < num ) {
fibonacci.push( fibonacci[fibonacci.length - 2] + fibonacci[fibonacci.length - 1] );
}
return fibonacci.filter(fibNum => fibNum % 2 === 1 && fibNum <= num).reduce(((sum,curVal) => sum + curVal), 0);
}
``````

Explanation

1. Create an array which holds the first three values of the Fibonacci sequence: 0, 1, and 1.
2. Use a `while` loop to check the condition: is the last number in the Fibonacci array less than the `num` argument?
3. If not, then add a new number to the array, which is the sum of the second-to-last and the last number in the array.
4. Once the `while` loop is completed, Return the combined result of filtering and reducing the Fibonacci array: filter by odd numbers that are less than or equal to `num`, then reduce the array to the sum of all remaining values.

Tests

``````/**
* Tests for sumFibs
*/
let testArr = [];

testArr.push(
[1000, 1785],
[4000000, 4613732],
[4, 5],
[75024, 60696],
[75025, 135721],
[0, 0],
[1, 2],
[2, 2],
[3, 5],
[undefined, 0],
)

testArr.forEach(arr => {
console.log(sumFibs(arr[0]) === arr[1] ? `PASS: The fib sum of \${arr[0]} == \${sumFibs(arr[0])} == \${arr[1]}` : `FAIL; \${arr[0]} got \${sumFibs(arr[0])}, expected \${arr[1]}`);
})
``````

I’ll let others chime in, but I usually discourage solutions that generate a Fibonacci array because they are very inefficient.