Tell us what’s happening:
Can someone help me please. I really dont know what I’m doing wrong.
Your code so far
const rawCatalogCards = [
"From a Buick 8 | King, Stephen | 2002 | Shelf K7",
"The Shining | King, Stephen | 1977 | Shelf K1",
"The Stand | King, Stephen | 1978 | Shelf K2",
"It | King, Stephen | 1986 | Shelf K3",
"Misery | King, Stephen | 1987 | Shelf K4",
"Do Androids Dream of Electric Sheep? | Dick, Philip K. | 1968 | Shelf D5",
"I, Robot | Asimov, Isaac | 1950 | Shelf A8",
"Foundation | Asimov, Isaac | 1951 | Shelf A9",
"Dune | Herbert, Frank | 1965 | Shelf H3",
"Neuromancer | Gibson, William | 1984 | Shelf G8",
"Snow Crash | Stephenson, Neal | 1992 | Shelf S6",
"The Martian | Weir, Andy | 2011 | Shelf W5",
"Ender's Game | Card, Orson Scott | 1985 | Shelf C2",
"The Hitchhiker's Guide to the Galaxy | Adams, Douglas | 1979 | Shelf A1",
"Ready Player One | Cline, Ernest | 2011 | Shelf C7",
"The Dark Tower: The Gunslinger | King, Stephen | 1982 | Shelf K5",
// edge cases: missing data
"Unknown Title | | 1975 | Shelf X1",
"Mysterious Manuscript | Unknown Author | | Shelf Z9",
"Ancient Scroll | Anonymous | 850 | ",
];
function parseCard(rawString) {
const parts = rawString.split("|");
const trimmedParts = [];
for (let i = 0; i < parts.length; i++) {
trimmedParts.push(parts[i].trim());
}
const title = trimmedParts[0];
const author = trimmedParts[1];
const year = trimmedParts[2];
const location = trimmedParts[3];
return {
title: title || "Unknown",
author: author || "Unknown",
year: year ? parseInt(year) : "Unknown",
location: location || "Unknown"
};
}
function parseCatalog(rawCards) {
const catalog = [];
for (let i = 0; i < rawCards.length; i++) {
catalog.push(parseCard(rawCards[i]));
}
return catalog;
}
const catalog = parseCatalog(rawCatalogCards);
function findByAuthor(catalog, author) {
const searchTerm = author.toLowerCase();
const results = [];
for (let i = 0; i < catalog.length; i++) {
if (catalog[i].author.toLowerCase().includes(searchTerm)) {
results.push(catalog[i]);
}
}
return results;
}
function groupByDecade(catalog) {
const grouped = {};
for (let i = 0; i < catalog.length; i++) {
const book = catalog[i];
if (book.year === "Unknown") {
if (!grouped["Unknown"]) {
grouped["Unknown"] = [];
}
grouped["Unknown"].push(book);
continue;
}
const decade = Math.floor(book.year / 10) * 10;
const decadeKey = `${decade}s`;
if (!grouped[decadeKey]) {
grouped[decadeKey] = [];
}
grouped[decadeKey].push(book);
}
return grouped;
}
const byDecade = groupByDecade(catalog);
function renderEntry(entry) {
const title = entry.title || "Unknown";
const author = entry.author || "Unknown";
const year = entry.year || "Unknown";
const location = entry.location || "Unknown";
return `${"-".repeat(25)}
Title: ${title}
Author: ${author}
Year: ${year}
Location: ${location}
${"-".repeat(25)}`;
}
console.log(renderEntry(catalog[0]));
function validateEntry(entry) {
let isValid = true;
if (!("title" in entry) || !entry.title || entry.title === "Unknown") {
isValid = false;
}
if (!("author" in entry) || !entry.author || entry.author === "Unknown") {
isValid = false;
}
if (!("year" in entry) || !entry.year || entry.year === "Unknown") {
isValid = false;
}
if (!("location" in entry) || !entry.location || entry.location === "Unknown") {
isValid = false;
}
return isValid;
}
function exportToJSON(catalog) {
return JSON.stringify(catalog, null, 2);
}
function exportToCSV(catalog) {
const header = "Title,Author,Year,Location";
const rows = [];
// User Editable Region
for (i = 0; i < catalog.length; i++) {
const entry = catalog[i];
rows.push(`"${enter.title}",${enter.author}",${enter.year}",${enter.location}"`);
}
// User Editable Region
}
Your browser information:
User Agent is: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36 OPR/130.0.0.0 (Edition std-2)
Challenge Information:
Build a Heritage Library Catalog - Step 28
