examples and performance testing of imperative, and Lodash Chain and Flow methods
A Pen by Vlad Bezden on CodePen.
examples and performance testing of imperative, and Lodash Chain and Flow methods
A Pen by Vlad Bezden on CodePen.
'use strict' | |
console.clear() | |
const fp = _.noConflict() | |
const add = (a, b) => a + b | |
const curriedAdd = fp.curry(add) | |
const input = _.range(1000) | |
function addAllUsingFlowWay(fn, arr) { | |
const nestedLoop = (x) => _.map(x, (v) => x.map(v2 => fn(v, v2))) | |
return _.flow([ | |
nestedLoop, | |
_.flatten, | |
fp.reduce(_.add, 0) | |
])(arr) | |
} | |
function addAllUsingChainWay(fn, arr) { | |
return _ | |
.chain(arr) | |
.map(x => arr.map(y => fn(x, y))) | |
.flatten() | |
.reduce((acc, cur) => acc + cur) | |
.value() | |
} | |
function addAllImprerativeWay(fn, arr) { | |
let result = 0 | |
for (let i = 0; i < arr.length; i++) { | |
for (let j = 0; j < arr.length; j++) { | |
result += fn(arr[i], arr[j]) | |
} | |
} | |
return result | |
} | |
function performanceCalc(fn, ...params) { | |
const start = +new Date() | |
const result = fn(...params) | |
const end = +new Date() | |
console.log(`Result: ${result}. Execution Time: ${end - start} ms`) | |
} | |
console.log('------- Imperative Way -------') | |
performanceCalc(addAllImprerativeWay, add, input) | |
performanceCalc(addAllImprerativeWay, curriedAdd, input) | |
console.log('------- Flow Way -------') | |
performanceCalc(addAllUsingFlowWay, add, input) | |
performanceCalc(addAllUsingFlowWay, curriedAdd, input) | |
console.log('------- Chain Way -------') | |
performanceCalc(addAllUsingChainWay, add, input) | |
performanceCalc(addAllUsingChainWay, curriedAdd, input) |
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.13.1/lodash.min.js"></script> | |
<script src="https://cdn.jsdelivr.net/lodash/4.14.1/lodash.fp.min.js"></script> |