Description
You’re building a mini in-memory search system that can store categorized data — such as Books, Movies, or Songs.
Each category can have multiple items, and you should be able to filter and sort those items dynamically.
Your goal is to design a class that supports adding documents and querying them efficiently — all in memory.
Your Task
Implement a class InMemorySearch that supports two methods:
addDocuments(itemName, ...items)
- Adds one or more items (objects) to the given category (
itemName). - If the category doesn’t exist yet, create it automatically.
search(itemName, filterFunction, sortCondition)
- Returns all items under the given category that satisfy the
filterFunction. - If no such category exists, return an empty array.
- If a
sortConditionobject is provided with{ key, asc }, sort results: - Ascending order if
asc: true - Descending order if
asc: false
- Ascending order if
Method
Method | Description |
|---|---|
| Adds documents under a category name |
| Filters and optionally sorts items under the given category |
Example
const library = new InMemorySearch();
library.addDocuments(
"Books",
{ title: "The Alchemist", rating: 4.7, year: 1988 },
{ title: "Atomic Habits", rating: 4.9, year: 2018 },
{ title: "Deep Work", rating: 4.8, year: 2016 },
{ title: "The Subtle Art of Not Giving a F*ck", rating: 4.3, year: 2016 }
);
console.log(
library.search("Books", (b) => b.rating > 4.5, { key: "year", asc: true })
);
Expected Output
[
{ title: "The Alchemist", rating: 4.7, year: 1988 },
{ title: "Deep Work", rating: 4.8, year: 2016 },
{ title: "Atomic Habits", rating: 4.9, year: 2018 }
]Expected Behavior
✅ Stores categorized data correctly
✅ Filters results based on condition
✅ Sorts by key in ascending/descending order
✅ Returns [] for missing categories
✅ Handles multiple additions to the same category