Skip to content

Instantly share code, notes, and snippets.

@vlad-bezden
Created August 3, 2016 12:47
Show Gist options
  • Save vlad-bezden/0dfe6a676948f821a1d50ac1d1770c93 to your computer and use it in GitHub Desktop.
Save vlad-bezden/0dfe6a676948f821a1d50ac1d1770c93 to your computer and use it in GitHub Desktop.
Lodash Chain Flow

Lodash Chain Flow

examples and performance testing of imperative, and Lodash Chain and Flow methods

A Pen by Vlad Bezden on CodePen.

License.

'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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment