AniUI Academy

Frontend AlgoArena & Practice Challenges

A practice arena built for frontend engineers. 150 hand-written problems across arrays and objects, async and promises, functions and closures, data structures, and DOM utilities — every one graded against real tests in your browser.

150 Problems

Frontend DSA AlgoArena

44

Easy Fundamentals

66

Medium Core System DSA

40

Hard Advanced DSA

Category:AllArrays & ObjectsAsync & PromisesFunctions & ClosuresData StructuresDOM & Utilities
#1
Build your own groupByeasyArrays & Objects

Turn a flat array of records into an object keyed by whatever field you choose — the utility you end up rewriting on every project.

+150 XPSolve
#2
Write debounce from scratchmediumFunctions & Closures

Stop a function firing on every keystroke. The classic interview question, and the thing that makes search boxes usable.

+250 XPSolve
#3
Retry a request with backoffhardAsync & Promises

Flaky networks are normal. Retry a failing promise a few times, waiting longer after each attempt.

+350 XPSolve
#4
Compare two objects properlymediumArrays & Objects

Why does `{a:1} === {a:1}` return false? Write the deep comparison that answers what you actually meant.

+250 XPSolve
#5
Array Flattening with DeptheasyArrays & Objects

Flatten a nested array structure up to a specified maximum depth parameter.

+150 XPSolve
#6
Two Sum in O(n) TimeeasyArrays & Objects

Find the two indices in an array of numbers that sum up to a specific target value.

+150 XPSolve
#7
Implement Throttle Rate LimitermediumFunctions & Closures

Ensure a function is executed at most once per specified time interval.

+250 XPSolve
#8
Function Memoization CachemediumFunctions & Closures

Create a memoized wrapper function that caches return values based on argument inputs.

+200 XPSolve
#9

Execute an array of promises concurrently and resolve with an array of all fulfilled values.

+300 XPSolve
#10

Design a data structure that follows the constraints of a Least Recently Used cache.

+350 XPSolve
#11
Custom Event Emitter / PubSubmediumDOM & Utilities

Build a event subscription pattern with `.on()`, `.emit()`, and `.off()` methods.

+250 XPSolve
#12
Valid Parentheses MatchereasyData Structures

Determine if an input string of brackets `()[]{}` is valid.

+150 XPSolve
#13

Split a flat list into rows of N — the maths behind every grid layout, batched request, and carousel page.

+150 XPSolve
#14
Generate a range of numberseasyArrays & Objects

Build [0, 1, 2, ...] without a for loop cluttering your JSX — the helper behind pagination bars and skeleton lists.

+150 XPSolve
#15

`new Set()` cannot dedupe objects. Write the version that decides sameness with a function you supply.

+150 XPSolve
#16
Pick only the keys you needeasyArrays & Objects

Trim a fat API object down to the three fields your component renders, without dragging the rest into props.

+150 XPSolve
#17
Omit keys from an objecteasyArrays & Objects

Strip `password` and `internalNotes` before you send an object anywhere — the inverse of pick.

+150 XPSolve
#18
Count items by a computed keyeasyArrays & Objects

Turn a list of records into a tally — the one-liner behind every filter chip that shows a number beside it.

+150 XPSolve
#19
Partition an array in one passeasyArrays & Objects

Split a list into matches and non-matches without filtering twice and running your predicate on every item two times.

+150 XPSolve
#20

Turn a CSV header row plus a data row into a record — the last step of every hand-rolled spreadsheet import.

+150 XPSolve
#21

Convert an array of records into an id-keyed object so lookups stop being O(n) `find` calls.

+150 XPSolve
#22
Zip any number of arrays togethermediumArrays & Objects

Interleave parallel arrays into rows — how you line up labels, values, and colours before feeding a chart.

+250 XPSolve
#23
Unzip rows back into columnsmediumArrays & Objects

Transpose an array of rows into an array of columns — the inverse of zip, and how you turn a table into series.

+250 XPSolve
#24
Find the values two arrays sharemediumArrays & Objects

Which permissions does this user have that this route requires? An ordered, deduplicated intersection.

+250 XPSolve
#25

Which of these items are not already in the cart? Set subtraction where identity is a function, not a reference.

+250 XPSolve
#26

Merge tag lists from three sources into one deduplicated list, in the order the tags first showed up.

+250 XPSolve
#27
Sort a table by several columnsmediumArrays & Objects

Score descending, then name ascending. The comparator every sortable data table eventually needs.

+250 XPSolve
#28
Move an item to a new positionmediumArrays & Objects

The reorder operation behind every drag-and-drop list, written immutably so React notices the change.

+250 XPSolve
#29

Get `user.profile.avatar.url` without a chain of guards, and without throwing when the middle is missing.

+250 XPSolve
#30

Bundle a chat log into runs by the same author, so you render one avatar per burst instead of one per message.

+250 XPSolve
Showing 1 - 30 of 150 problems
Per page: