Skip to content

Instantly share code, notes, and snippets.

@halan
Last active November 23, 2016 12:30
Show Gist options
  • Select an option

  • Save halan/906d788b5f02650adf670fdebdef9fcb to your computer and use it in GitHub Desktop.

Select an option

Save halan/906d788b5f02650adf670fdebdef9fcb to your computer and use it in GitHub Desktop.
Técnicas com curry e composição
const map = transform => arr => {
let transformed = []
for(let i=0; i<=arr.length; i++) {
transformed = [...transformed, transform(arr[i], i)]
}
return transformed
}
//------------------------
const double = map(n => n * 2)
const triple = map(n => n * 3)
double([1 2, 3, 4])
triple([1, 2, 3, 4])
//------------------------
const filter = predicate => arr => {
let filtered = []
for(let i=0; i<=arr.length; i++) {
if(predicate(arr[i], i))
filtered = [...filtered, arr[i]]
}
return filtered
}
//------------------------
let servers = [
{ name: 'server1', status: 'online' },
{ name: 'server2', status: 'offline' },
{ name: 'server3', status: 'online' },
{ name: 'server4', status: 'online' }
]
const getName = server => server.name
const getStatus = server => server.status
const isOnline = server => getStatus(server) === 'online'
const allOnline = filter(isOnline)
const pluckNames = map(getName)
const namesOfAllOnline = pluckNames(allOnline(servers))
// without curry using common map/filter
const allOnline2 = arr =>
arr.filter(isOnline)
const pluckNames2 = arr =>
arr.map(getName)
// extract common map/filter to curried versions
const map2 = transform => arr =>
arr.map(transform)
const filter2 = predicate => arr =>
arr.filter(predicate)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment