var fibonacciList = function(fn, num) {
var list = [];
for(var i = 1; i <= num; i++) {
list.push(fn(i));
}
return list;
};
- mutability is all inside the function
// Considering terms in Fibonnaci sequence | |
// whose values don't exceed 4 million | |
// find sum of the even-valued terms | |
module.exports = (function() { | |
var fibonacci = function(num) { | |
if (num <= 1) { | |
return num; | |
} else { | |
return fibonacci(num - 1) + fibonacci(num - 2); | |
} | |
}; | |
var fibonacciList = function(fn, num) { | |
var list = []; | |
for(var i = 1; i <= num; i++) { | |
list.push(fn(i)); | |
} | |
return list; | |
}; | |
var evenNums = function(ary) { | |
return ary.filter(function(num) { return num % 2 === 0 }); | |
}; | |
var sum = function(numsAry) { | |
// es6 version return numsAry.reduce((prev, curr) => prev + curr); | |
return numsAry.reduce(function(acc, num) { return acc + num }); | |
}; | |
var sumEvenFibonacciNums = function(num) { | |
return sum(evenNums(fibonacciList(fibonacci, num))); | |
}; | |
return { | |
call: sumEvenFibonacciNums | |
}; | |
}()); |
// Considering terms in Fibonnaci sequence | |
// whose values don't exceed 4 million | |
// find sum of the even-valued terms | |
var sumEvenFibonacciNums = (function() { | |
var fibonacci = function(num) { | |
if (num <= 1) { | |
return num; | |
} else { | |
return fibonacci(num - 1) + fibonacci(num - 2); | |
} | |
}; | |
var fibonacciList = function(fn, num) { | |
var list = []; | |
for(var i = 1; i <= num; i++) { | |
list.push(fn(i)); | |
} | |
return list; | |
}; | |
var evenNums = function(ary) { | |
var evens = []; | |
ary.filter(function(num) { if (num % 2 === 0) { evens.push(num) } | |
}); | |
return evens; | |
}; | |
var sum = function(numsAry) { | |
return numsAry.reduce((prev, curr) => prev + curr); | |
}; | |
var sumEvenFibonacciNums = function(num) { | |
return sum(evenNums(fibonacciList(fibonacci, num))); | |
}; | |
return { | |
call: sumEvenFibonacciNums | |
}; | |
}()); | |
console.log(sumEvenFibonacciNums.call(10)); |
var evenNums = function(ary) {
return ary.filter(function(num) { return num % 2 === 0 });
};
vs
var evenNums = function(ary) {
var evens = [];
ary.filter(function(num) { if (num % 2 === 0) { evens.push(num) }
});
return evens;
};
They both produce the same outcome.
If I were to pass in an array, say [1,2,3,4,5,6], both would return [2,4,6]
The revised is functional programming, and a much better way to solve the same problem the original snippet is trying to solve.
The filter essentially is for what the "if (num % 2 === 0) { evens.push(num) }" does.
The revised returns an immutable version and it just returns the values that meet the requirements of the filter, versus the original, a mutable version where items are being added to an array.
In the original one, the var evens = []; is a side effect, in that a variable is being created and changing it.