为了账号安全,请及时绑定邮箱和手机立即绑定

Javascript收银机 - 为什么我不能记录面额的总值

Javascript收银机 - 为什么我不能记录面额的总值

慕丝7291255 2022-07-15 09:58:46
function checkCashRegister(price, cash, cid) {var register = [["ONE HUNDRED", 100, cid[8][1]],["TWENTY", 20, cid[7][1]], ["TEN", 10, cid[6][1]], ["FIVE", 5,  cid[5][1]],["ONE", 1, cid[4][1]], ["QUARTER", 0.25, cid[3][1]], ["DIME", 0.10, cid[2][1]], ["NICKEL", 0.05, cid[1][1]],["PENNY", 0.01, cid[0][1]] ]var insuf = "INSUFFICIENT_FUNDS";var closed = "CLOSED";var open = "OPEN";var totalRegister = register.reduce((sum, i) => sum + i[2], 0).toFixed(2);var answer = {status: "INSUFFICIENT_FUNDS", change: []};var change = Math.abs(price - cash);var newArr = []var count = 0if (totalRegister == change) {answer.status = closed;answer.change = cid;} else if (totalRegister < change) {answer.status = insuf} else if (totalRegister > change) {for (var i of register) {  while (change >= i[1] && i[2] > 0) {    change = Math.round(change*100)/100;    change -= i[1];    i[2] -= i[1];    var subArr = []    subArr.push(i[0], i[1]);    }    if (subArr) {      newArr.push(subArr)    }   }  }  console.log(newArr)return answer}所以我上面的代码几乎把我带到了我需要去的地方,并将下面的代码记录到控制台;[ [ 'TWENTY', 20 ],  [ 'TEN', 10 ],  [ 'FIVE', 5 ],  [ 'ONE', 1 ],  [ 'QUARTER', 0.25 ],  [ 'DIME', 0.1 ],  [ 'DIME', 0.1 ],  [ 'PENNY', 0.01 ] ]以此为输入;console.log(checkCashRegister(3.26, 100, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]));IT 会记录我正在处理的货币的面额,但我需要计算我使用该面额的次数的总和。我需要的其余代码字,如果我可以进行必要的更改,然后更改答案键,我将能够解决。它还会两次记录一角钱的价值,我不知道为什么。谁能指出我正确的方向?
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

原因是在subArr.push(i[0], i[1]);你用 推动货币的价值时i[1],你需要找到该货币面额是否已经存在,并增加它的计数。您可以为此目的使用地图数据结构,如下所示:


function checkCashRegister(price, cash, cid) {

  var register = [

    ["ONE HUNDRED", 100, cid[8][1]],

    ["TWENTY", 20, cid[7][1]],

    ["TEN", 10, cid[6][1]],

    ["FIVE", 5, cid[5][1]],

    ["ONE", 1, cid[4][1]],

    ["QUARTER", 0.25, cid[3][1]],

    ["DIME", 0.1, cid[2][1]],

    ["NICKEL", 0.05, cid[1][1]],

    ["PENNY", 0.01, cid[0][1]],

  ];


  var insuf = "INSUFFICIENT_FUNDS";

  var closed = "CLOSED";

  var open = "OPEN";

  var totalRegister = register.reduce((sum, i) => sum + i[2], 0).toFixed(2);

  var answer = {

    status: "INSUFFICIENT_FUNDS",

    change: []

  };

  var change = Math.abs(price - cash);

  var newArr = [];

  var map = new Map();

  var count = 0;


  if (totalRegister == change) {

    answer.status = closed;

    answer.change = cid;

  } else if (totalRegister < change) {

    answer.status = insuf;

  } else if (totalRegister > change) {

    for (var i of register) {

      while (change >= i[1] && i[2] > 0) {

        change = Math.round(change * 100) / 100;

        change -= i[1];

        i[2] -= i[1];

        if (map.get(i[0])) {

          map.set(i[0], map.get(i[0]) + 1);

        } else {

          map.set(i[0], 1)

        }

      }

    }

  }

  newArr = [...map]

  console.log(newArr);

  return answer;

}


console.log(

  checkCashRegister(3.26, 100, [

    ["PENNY", 1.01],

    ["NICKEL", 2.05],

    ["DIME", 3.1],

    ["QUARTER", 4.25],

    ["ONE", 90],

    ["FIVE", 55],

    ["TEN", 20],

    ["TWENTY", 60],

    ["ONE HUNDRED", 100],

  ])

);


查看完整回答
反对 回复 2022-07-15
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号