Javascript-将compose与reduce一起使用

问题描述

我正在学习使用javascript进行函数式编程。我了解到需要2个参数来减少。累加器和实际值,如果我们不提供初始值,则使用第一个参数。但我无法理解purchaseItem函数在下面的代码中如何工作。谁能解释一下。

const user = {
    name: 'Lachi',active: true,cart: [],purchases: []
}
let history = []
const compose = (f,g) => (...args) => f(g(...args))

console.log(purchaseItem(
    emptyCart,buyItem,applyTaxToItems,addItemToCart
)(user,{name: 'laptop',price: 200}))

function purchaseItem(...fns) {
    console.log(fns)
    return fns.reduce(compose)
}

function addItemToCart (user,item) {
    history.push(user)
    const updatedCart = user.cart.concat(item)
    return Object.assign({},user,{ cart: updatedCart })
}

function applyTaxToItems(user) {
    history.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({},{ cart: updatedCart })
}

function buyItem(user) {
    history.push(user)
    return Object.assign({},{ purchases: user.cart })
}

function emptyCart(user) {
    history.push(user)
    return Object.assign({},{cart: []})
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)