Frontend Coding Practice
Solve 90 frontend interview challenges in JavaScript, TypeScript, and React with an in-browser editor, tests, hints, and reviewed solutions.
JavaScript interview challenges
- Implement debounce (easy)
- Flatten a nested array (easy)
- Implement memoize (easy)
- Implement groupBy (easy)
- Implement curry (medium)
- Implement pipe (medium)
- Implement deepEqual (medium)
- Implement throttle (medium)
- Implement EventEmitter (medium)
- Implement deepClone (medium)
- Implement Promise.all (hard)
- Implement LRU Cache (hard)
- Chunk array into groups (easy)
- Implement once(fn) (easy)
- Implement compose() (medium)
- Implement uniqueBy() (medium)
- Implement Promise.allSettled (medium)
- Async retry with n attempts (medium)
- Async task scheduler (concurrency limit) (hard)
- Implement Observable / subscribe (hard)
- Find Array Leaders (easy)
- Polyfill: Array.prototype.reduce (easy)
- Progress Tracker (class) (medium)
- Async Link Crawler (hard)
- Polyfill: Function.prototype.bind (medium)
- Polyfill: Array.prototype.flat (easy)
- Polyfill: Promise.race (medium)
TypeScript interview challenges
- Write Type Guards (easy)
- Implement generic pick() (easy)
- Implement generic omit() (easy)
- Implement a generic Stack<T> (easy)
- Implement updateRecord<T> (easy)
- Implement typed groupBy() (medium)
- Result<T, E> — discriminated union (medium)
- Implement deepMerge() (medium)
- Implement a generic LinkedList<T> (medium)
- Typed memoize with generics (medium)
- Type-safe EventEmitter (hard)
- Generic async retry() (hard)
- Type-safe QueryBuilder (hard)
- Chess Game Design (OOD) (hard)
React interview challenges
- Implement usePrevious (easy)
- Implement useToggle (easy)
- Implement useLocalStorage (medium)
- Implement useWindowSize (easy)
- Implement useFetch (medium)
- Implement useDebounce (medium)
- Implement useIntersectionObserver (hard)
- Implement useInterval (medium)
- Item List Manager (easy)
- Counter with Step (easy)
- Traffic Light (easy)
- Shopping Cart (medium)
- Undo / Redo Editor (medium)
- Todo App (useReducer) (hard)
- Character Counter (easy)
- Login Form with Validation (medium)
- Multi-Step Form (hard)
- Search & Filter List (easy)
- Sortable Table (medium)
- Paginated List (medium)
- Infinite Scroll Feed (hard)
- Accordion (easy)
- Star Rating (easy)
- Tabs Component (medium)
- Drag-and-Drop List (hard)
- Memoized Expensive Calculation (medium)
- Optimized Child Re-renders (medium)
- Virtualized List (hard)
- Contact Form (easy)
- Slideshow (easy)
- Blog Post Manager (easy)
- Patient Medical Records (medium)
- CryptoRank Exchange (medium)
- Code Review Feedback (medium)
- Employee Validation Form (medium)
- Word Omitter (medium)
- Article Sorting (easy)
- Live Search Bar (debounced) (medium)
- Stop the Re-render Storm (medium)
- Flood Fill Grid (hard)
- Fix the +3 Counter (easy)
- Cart Quantity Won't Refresh (easy)
- My Draft Moved to Another Row (medium)
- Messages Arrive Twice (medium)
- This Effect Never Settles (medium)
- The Filter Shows Yesterday's Data (easy)
- The Form Loses My Input (easy)
- Switching Views Crashes the Hooks (medium)
- The Report Reacts to Every Context Change (medium)