【发布时间】:2020-03-29 16:43:57
【问题描述】:
我有一个简单的函数,必须进行更改。自动售货机之类的。它需要 2 个参数:物品的价格以及收到的一系列纸币和硬币。输出必须是仅[quarter, dime, nickel, penny] 格式的数字数组。例如,项目成本为3.29,收到的金额为[1,1,2]。在这种情况下,输出必须是[2,2,0,1],因为0.71 的变化可以分为 2 个四分之一、2 个角钱、0 个镍币和 1 个便士。如果收到的金额低于价格,则必须退还全部金额,但只能以上述格式退还。例如,如果价格为5,但支付的金额为[2,2],则输出必须为[16,0,0,0]。我创建了这个函数:
`function change(price,paid) {
const totalPaidVal = paid.reduce((a,b)=>a+b,0)
if (totalPaidVal === price) {
return(Array(4).fill(0))
} else if (price > totalPaidVal) {
const qNum = Math.floor(totalPaidVal/0.25);
const dNum = Math.floor((totalPaidVal-(qNum*0.25))/0.1);
const nNum = Math.floor((totalPaidVal-(qNum*0.25)-(dNum*0.1))/0.05);
const pNum = Math.round((totalPaidVal-(qNum*0.25)-(dNum*0.1)-(nNum*0.05))/0.01);
const arr = [qNum,dNum,nNum,pNum];
return arr;
} else if(price<totalPaidVal) {
const change = totalPaidVal-price;
const qNum = Math.floor(change/0.25);
const dNum = Math.floor((change-(qNum*0.25))/0.1);
const nNum = Math.floor((change-(qNum*0.25)-(dNum*0.1))/0.05);
const pNum = Math.round((change-(qNum*0.25)-(dNum*0.1)-(nNum*0.05))/0.01);
const arr = [qNum,dNum,nNum,pNum];
return arr;
}
}`
它工作得很好,但我知道它看起来像是我重复自己做的不好。我一直在尝试创建其他变量来清理它,但它看起来仍然很奇怪。必须有更有效的方法来做到这一点,而无需一直重复相同的代码。所以,这里有一个问题:清理它并让它看起来比现在更简单的最好方法是什么?
【问题讨论】:
-
price > totalPaidValprice > totalPaidVal时你计算退货金额? -
是的。如果金额不包括价格,则必须退还全部金额。输出格式在所有情况下都必须相同。
标签: javascript arrays function