Untitled
unknown
javascript
25 days ago
1.6 kB
2
Indexable
Never
class Book { constructor(title, author, year) { this.title = title; this.author = author; this.year = year; } toString() { return `Title: ${this.title}, Author: ${this.author}, Year: ${this.year}`; } } class BookLibrary { constructor() { this.books = new Map(); } addBook(title, author, year) { const key = this.generateKey(title, author); if (this.books.has(key)) { throw new Error('Book already exists in library.'); } this.books.set(key, new Book(title, author, year)) } findBooks({ title, author }) { return this.toArray().filter(book => { const titleMatches = !title || book.title.toLowerCase().includes(title.toLowerCase()); const authorMatches = !author || book.author.toLowerCase().includes(author.toLowerCase()); return titleMatches && authorMatches; }); } findByTitle(title) { return this.findBooks({ title }); } findByAuthor(author) { return this.findBooks({ author }); } listAllBooks() { const array = this.toArray(); if (!array.length) { console.log('No books available.'); } else { array.forEach(book => console.log(book.toString())); } } toArray() { return Array.from(this.books.values()); } generateKey(title, author) { return `${author.toLowerCase()}-${title.toLowerCase()}`; } }
Leave a Comment