Example of FP
const user = {
name: 'Kim',
active: true,
cart: [{ name: 'orange', price: 20}],
purchases: [{name: 'apple', price: 10}]
}
const item = {name: 'laptop', price: 200}
let amazonHistory = [];
const compose = (accumulatorFunction, currentFunction) => {
return (...args) => accumulatorFunction(currentFunction(...args));
}
function purchaseItem(...fns) {
return fns.reduce(compose)
}
function addItemToCart(user, item) {
amazonHistory.push(user)
const updatedCart = user.cart.concat([item]);
return Object.assign({}, user, {cart: updatedCart})
}
function applyTaxToItems(user) {
amazonHistory.push(user)
const { cart } = user;
const taxRate = 1.3;
const updatedCart = cart.map(item => {
return {
name: item.name,
price: item.price*taxRate
}
})
return Object.assign({}, user, {cart: updatedCart})
}
function buyItem(user){
amazonHistory.push(user)
const updatedPurchases=user.purchases.concat(user.cart)
return Object.assign({},user,{purchases:updatedPurchases})
}
function emptyCart(user) {
amazonHistory.push(user)
return Object.assign({}, user, {cart: []})
}
purchaseItem(emptyCart, buyItem, applyTaxToItems, addItemToCart)(user, item)
//amazonHistoryLast updated