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

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 = 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];

    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 会记录我正在处理的货币的面额,但我需要计算我使用该面额的次数的总和。我需要的其余代码字,如果我可以进行必要的更改,然后更改答案键,我将能够解决。它还会两次记录一角钱的价值,我不知道为什么。谁能指出我正确的方向?


慕丝7291255
浏览 149回答 1
1回答

胡说叔叔

原因是在subArr.push(i[0], i[1]);你用 推动货币的价值时i[1],你需要找到该货币面额是否已经存在,并增加它的计数。您可以为此目的使用地图数据结构,如下所示:function checkCashRegister(price, cash, cid) {&nbsp; var register = [&nbsp; &nbsp; ["ONE HUNDRED", 100, cid[8][1]],&nbsp; &nbsp; ["TWENTY", 20, cid[7][1]],&nbsp; &nbsp; ["TEN", 10, cid[6][1]],&nbsp; &nbsp; ["FIVE", 5, cid[5][1]],&nbsp; &nbsp; ["ONE", 1, cid[4][1]],&nbsp; &nbsp; ["QUARTER", 0.25, cid[3][1]],&nbsp; &nbsp; ["DIME", 0.1, cid[2][1]],&nbsp; &nbsp; ["NICKEL", 0.05, cid[1][1]],&nbsp; &nbsp; ["PENNY", 0.01, cid[0][1]],&nbsp; ];&nbsp; var insuf = "INSUFFICIENT_FUNDS";&nbsp; var closed = "CLOSED";&nbsp; var open = "OPEN";&nbsp; var totalRegister = register.reduce((sum, i) => sum + i[2], 0).toFixed(2);&nbsp; var answer = {&nbsp; &nbsp; status: "INSUFFICIENT_FUNDS",&nbsp; &nbsp; change: []&nbsp; };&nbsp; var change = Math.abs(price - cash);&nbsp; var newArr = [];&nbsp; var map = new Map();&nbsp; var count = 0;&nbsp; if (totalRegister == change) {&nbsp; &nbsp; answer.status = closed;&nbsp; &nbsp; answer.change = cid;&nbsp; } else if (totalRegister < change) {&nbsp; &nbsp; answer.status = insuf;&nbsp; } else if (totalRegister > change) {&nbsp; &nbsp; for (var i of register) {&nbsp; &nbsp; &nbsp; while (change >= i[1] && i[2] > 0) {&nbsp; &nbsp; &nbsp; &nbsp; change = Math.round(change * 100) / 100;&nbsp; &nbsp; &nbsp; &nbsp; change -= i[1];&nbsp; &nbsp; &nbsp; &nbsp; i[2] -= i[1];&nbsp; &nbsp; &nbsp; &nbsp; if (map.get(i[0])) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; map.set(i[0], map.get(i[0]) + 1);&nbsp; &nbsp; &nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; map.set(i[0], 1)&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; }&nbsp; newArr = [...map]&nbsp; console.log(newArr);&nbsp; return answer;}console.log(&nbsp; checkCashRegister(3.26, 100, [&nbsp; &nbsp; ["PENNY", 1.01],&nbsp; &nbsp; ["NICKEL", 2.05],&nbsp; &nbsp; ["DIME", 3.1],&nbsp; &nbsp; ["QUARTER", 4.25],&nbsp; &nbsp; ["ONE", 90],&nbsp; &nbsp; ["FIVE", 55],&nbsp; &nbsp; ["TEN", 20],&nbsp; &nbsp; ["TWENTY", 60],&nbsp; &nbsp; ["ONE HUNDRED", 100],&nbsp; ]));
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript