Tell us what’s happening:
The listOverdueDevices function checks only for “CheckedOut” status, sorts the returned array by ascending order and works fine when using zero-padded months/days for both today and dueDate, yet those requirements appear as incomplete (#18, 19 and 20). Am I misunderstanding them?
Your code so far
const equipmentLedger = {
"1": {
type: "PC",
status: "CheckedOut",
borrower: {
name: "John Smith",
email: "john@acme.org" },
dueDate: "11/30/2025" },
"2": {
type: "Laptop",
status: "CheckedIn",
borrower: {
name: "",
email: "" },
dueDate: "" },
"3": {
type: "Laptop",
status: "CheckedOut",
borrower: {
name: "Jane Doe",
email: "jane@acme.org" },
dueDate: "12/10/2024" },
"4": {
type: "iPad",
status: "CheckedIn",
borrower: {
name: "",
email: "" },
dueDate: "" }
};
function checkoutDevice(ledger, assetTag, borrower) {
const updatedLedger = structuredClone(ledger);
if (!Object.hasOwn(ledger, assetTag)) {
return { ledger: ledger, message: `Device ${assetTag} was not found.`}
} else if (updatedLedger[assetTag]["status"] === "CheckedOut") {
return {ledger: ledger, message: `Device ${assetTag} has already been checked out.`}
} else {
const { name, email } = borrower;
updatedLedger[assetTag]["borrower"]["name"] = name;
updatedLedger[assetTag]["borrower"]["email"] = email;
updatedLedger[assetTag]["status"] = "CheckedOut";
return {ledger: updatedLedger, message: `Device ${assetTag} now registered as borrowed by ${updatedLedger[assetTag]["borrower"]["name"]}.`}
};
};
console.log();
function checkinDevice(ledger, assetTag) {
const updatedLedger = structuredClone(ledger);
if (!Object.hasOwn(ledger, assetTag)) {
return {ledger: ledger, message: `Device ${assetTag} is not in the ledger.`}
} else {
updatedLedger[assetTag]["borrower"]["name"] = "";
updatedLedger[assetTag]["borrower"]["email"] = "";
updatedLedger[assetTag]["dueDate"] = "";
updatedLedger[assetTag]["status"] = "CheckedIn";
return { ledger: updatedLedger, message: `Device ${assetTag} now registered as checked in.`};
};
}
console.log()
function getFullDate(date) {
const dateArr = date.split("/");
const [tmonth, tday, tyear] = dateArr;
const fullDate = tyear * 10000 + tmonth * 100 + tday * 1;
return fullDate;
}
function listOverdueDevices(ledger, today) {
const overdueDevices = [];
const fullToday = getFullDate(today)
for (const assetTag in ledger) {
if (ledger[assetTag].status === "CheckedOut") {
const fullDueDate = getFullDate(ledger[assetTag].dueDate)
if (fullDueDate < fullToday) {
overdueDevices.push({ assetTag, fullDueDate });
}
}
}
overdueDevices.sort((a,b) => a.fullDueDate - b.fullDueDate);
const plainOverdueDevices = overdueDevices.map(obj => obj.assetTag)
return plainOverdueDevices;
};
console.log(listOverdueDevices(equipmentLedger, "01/1/2026"))
function serializeLedger(ledger) {
const ledgerString = JSON.stringify(ledger);
return ledgerString;
}
function loadLedger(json) {
const jsObject = JSON.parse(json);
return jsObject;
}
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Safari/537.36
Challenge Information:
Build a Device Loan Ledger - Build a Device Loan Ledger