Tell us what’s happening:
Hi!
I have struggled with this challenge but I failed, I have this codes that passes most of the tests except the last two. Unfortunately it doesn’t solve the problem
Your code so far
const cashInput=document.getElementById("cash");
const changeDue=document.getElementById("change-due");
const button=document.getElementById("purchase-btn");
const totalDiv=document.getElementById("total-div");
const pennies=document.getElementById("pennies");
const nickel=document.getElementById("nickels");
const dimes=document.getElementById("dimes");
const quarters=document.getElementById("quarters");
const ones=document.getElementById("ones");
const fives=document.getElementById("fives");
const tens=document.getElementById("tens");
const twenties=document.getElementById("twenties");
const hundreds=document.getElementById("hundreds");
const changePage=document.getElementById("change");
//const myValue=parseFloat(cashInput.value)
let price = 1.87;
let cid = [
['PENNY', 1.01],
['NICKEL', 2.05],
['DIME', 3.1],
['QUARTER', 4.25],
['ONE', 90],
['FIVE', 55],
['TEN', 20],
['TWENTY', 60],
['ONE HUNDRED', 100]
];
//displaying default values
pennies.textContent=`$${cid[0][1]}`;
nickel.textContent=`$${cid[1][1]}`;
dimes.textContent=`$${cid[2][1]}`;
quarters.textContent=`$${cid[3][1]}`;
ones.textContent=`$${cid[4][1]}`;
fives.textContent=`$${cid[5][1]}`;
tens.textContent=`$${cid[6][1]}`;
twenties.textContent=`$${cid[7][1]}`;
hundreds.textContent=`$${cid[8][1]}`;
let totalAmount=Math.round(cid.reduce((acc,item)=>acc+item[1],0)*100)/100;
totalDiv.textContent=`Total: ${totalAmount}`;
//change with specific coins
const actualChange=()=>{
let amountDue=0;
if(isNaN(parseFloat(cashInput.value))){
alert("Input is no a valid number");
}
else{
amountDue+=Math.round((parseFloat(cashInput.value)-price)*100)/100;
if(parseFloat(cashInput.value)<price){
alert("Customer does not have enough money to purchase the item");
}
else if(parseFloat(cashInput.value)===price){
changeDue.textContent=`No change due - customer paid with exact cash`;
}
else if(amountDue===totalAmount){
const changeAmount=cid.filter((item)=>item[1]===amountDue).flat();
changeDue.innerHTML=`<p>Status:CLOSED</p>
<p>${changeAmount[0]}:$${changeAmount[1]}</p>`;
}
else if(amountDue>totalAmount){
changeDue.textContent=`Status: INSUFFICIENT_FUNDS`;
}
else{
//handle correct amount of change
let change={};
change.status="OPEN";
change.change=[];
const amounts={
"ONE HUNDRED":100,
TWENTY:20,
TEN:10,
FIVE:5,
ONE:1,
QUARTER:0.25,
DIME:0.1,
NICKEL:0.05,
PENNY:0.01
}
Object.keys(amounts).forEach((key)=>{
if(amountDue>amounts[key]){
let amountOfBillInCid=0;
cid.forEach((type)=>{
if(type[0]===key){
amountOfBillInCid= type[1];
}
})
let amountDueBefore=amountDue;
amountDue=amountDue%amounts[key];
amountDue=Math.round(amountDue*100)/100;
let difference=Math.round((amountDueBefore-amountDue)*100)/100;
if(difference>amountOfBillInCid){
change.change.push([key,amountOfBillInCid]);
amountDue=amountDueBefore-amountOfBillInCid;
}
else{
change.change.push([key,difference]);
}
}
});
changeDue.textContent=`Status: ${change.status}`;
change.change.forEach((item)=>{
changeDue.insertAdjacentHTML("beforeend", `<p>${item[0]}: $${item[1]}</p>`)
});
}
if(amountDue>0){
changeDue.textContent=`Status: INSUFFICIENT_FUNDS`;
}
}
}//actualChange();
button.addEventListener("click",actualChange);
<!-- file: index.html -->
/* file: script.js */
/* file: styles.css */
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36
Challenge Information:
Build a Cash Register Project - Build a Cash Register