【问题标题】:What is the best way to clean up the code?清理代码的最佳方法是什么?
【发布时间】: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 &gt; totalPaidValprice &gt; totalPaidVal时你计算退货金额?
  • 是的。如果金额不包括价格,则必须退还全部金额。输出格式在所有情况下都必须相同。

标签: javascript arrays function


【解决方案1】:

您可以使用函数从代码中删除重复性。

function getNums(value){
    const qNum = Math.floor(value/0.25);
    const dNum = Math.floor((value-(qNum*0.25))/0.1);
    const nNum = Math.floor((value-(qNum*0.25)-(dNum*0.1))/0.05);
    const pNum = Math.round((value-(qNum*0.25)-(dNum*0.1)-(nNum*0.05))/0.01);
    return [qNum,dNum,nNum,pNum];
}

根据条件调用该函数

if (price > totalPaidVal) {
  return getNums(totalPaidVal)
} else if(price < totalPaidVal){
  return getNums(totalPaidVal - price)
}

【讨论】:

  • 这看起来比我的解决方案好得多。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-28
  • 2010-09-07
  • 2013-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多