清理代码的最佳方法是什么?

时间:2020-03-29 16:43:57

标签: javascript arrays function

我有一个简单的功能,需要进行更改。自动售货机之类的东西。它包含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;
  }
}`

它工作正常,但我知道好像我再重复一遍,什么不好。我一直在尝试创建其他变量来清理它,但它看起来仍然很奇怪。必须有一种更有效的方法来做到这一点,而不必一直重复相同的代码。因此,这里有一个问题:什么是清理它并使它看起来比现在更简单的最佳方法?

1 个答案:

答案 0 :(得分:2)

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

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)
}
相关问题