Last active
July 13, 2017 15:42
-
-
Save moredip/862b2754513a1f01709ea24c2cdb979b to your computer and use it in GitHub Desktop.
Introduce Partial Application
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const priceByCommodityAndCountry = { | |
'MANGO': [ | |
{ | |
origin: 'US', | |
price: 101 | |
}, | |
{ | |
origin: 'BR', | |
price: 120 | |
} | |
], | |
'BANANA': [ | |
{ | |
origin: 'US', | |
price: 111 | |
}, | |
{ | |
origin: 'MX', | |
price: 90 | |
} | |
], | |
'APPLE': [ | |
{ | |
origin: 'US', | |
price: 67 | |
}, | |
{ | |
origin: 'BR', | |
price: 66 | |
} | |
] | |
}; | |
const EXPENSIVE_THRESHOLD=100; | |
function getExpensiveFruitSoldByCountry(targetCountry){ | |
let expensiveFruit = []; | |
function isFromCountry(sourcedFruit){ | |
return hasOrigin(sourcedFruit,targetCountry); | |
} | |
function isExpensive(sourcedFruit){ | |
return isMoreExpensiveThanThreshold(sourcedFruit,EXPENSIVE_THRESHOLD); | |
} | |
Object.entries(priceByCommodityAndCountry).forEach( function([fruitName,sourcedFruits]){ | |
sourcedFruits.forEach( function(sourcedFruit){ | |
if( !isFromCountry(sourcedFruit) ){ | |
return; | |
} | |
if( !isExpensive(sourcedFruit) ){ | |
return; | |
} | |
expensiveFruit.push(fruitName); | |
}); | |
}); | |
return expensiveFruit; | |
} | |
function hasOrigin(fruit,origin){ | |
return fruit.origin === origin; | |
} | |
function isMoreExpensiveThanThreshold(fruit,threshold){ | |
return fruit.price > threshold; | |
} | |
console.log('expensive fruit:'); | |
console.log('US:', getExpensiveFruitSoldByCountry('US')); | |
console.log('MX:', getExpensiveFruitSoldByCountry('MX')); | |
console.log('BR:', getExpensiveFruitSoldByCountry('BR')); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment