Get a random item from a JavaScript array
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.
One common task in JavaScript programming involves selecting a random element from an array. This operation has applications in various scenarios such as loading random images on a refresh, picking a random quote for a daily message, or in gaming logic for choosing random moves. Let’s delve into the technicalities of achieving this, some of the mathematics behind it, and a few practical examples.
Understanding Arrays in JavaScript
Before we extract a random element, it's essential to understand what an array in JavaScript is. An array is a single variable that is used to store different elements. It is often used to store data types like strings, numbers, or even objects, where the order of the data can be important.
Generating a Random Index
The process of selecting a random item from an array fundamentally revolves around generating a random index first. JavaScript offers the Math.random() function, which provides a pseudo-random floating-point number in the range of 0 (inclusive) to 1 (exclusive). However, to use this floating-point number as an array index, we need to adjust it to be a whole number within the valid range of the array indices.
Here are the steps involved:
- Generate a random floating-point number between 0 and 1 using
Math.random(). - Multiply this number by the length of the array, which scales this number to range from 0 to just under the array length.
- Apply
Math.floor()to round down the floating-point number to the nearest whole number, ensuring it's a valid index. TheMath.floor()method rounds a number DOWNWARDS to the nearest integer, and it returns the result.
Example Code
Consider an array of colors:
To get a random color from the array:
This function can be universally used to retrieve a random item from any array by passing the array as an argument.
Why Use Math.floor() Instead of Math.round()?
It's important to note that using Math.floor() is essential in this context instead of Math.round(). Using Math.round() could lead to an incorrect distribution of randomness, particularly near the boundaries (i.e., the first and last elements). The reason is Math.round() rounds to the nearest integer, possibly generating an index value equal to the array's length, which is out of bounds.
Additional Considerations
Ensuring Uniqueness
If you need to select multiple unique items randomly from an array (e.g., drawing numbers in a lottery), you need to implement an additional system to track which items have been chosen and exclude them from subsequent selections.
Performance Aspects
For smaller arrays, the performance difference in the approach to generate a random index is negligible. However, for very large arrays, or systems where this method is called frequently, optimizing the randomness algorithm or caching some results could be beneficial.
Security Implications
Math.random() is not cryptographically secure. For scenarios where security is essential, consider using more secure alternatives like the Web Cryptography API.
Summary Table
| Key Point | Details |
| Core Function | Math.random() generates a float; scaled and floored for index. |
| Common Method | Math.floor(Math.random() * arrayLength) |
| Correctness | Math.floor() prevents index out of bounds unlike Math.round(). |
| Usage | Random item selection, games, UI elements, statistical sampling. |
| Consideration for Uniqueness | Required additional logic for selecting multiple unique items from an array. |
| Performance | Generally negligible for small arrays, but consider optimality for larger datasets. |
| Security | Math.random() is not suitable for security-sensitive operations. |
Final Thoughts
Retrieving a random item from a JavaScript array is straightforward, thanks to the simplicity of Math.random() and the numeric capabilities provided by JavaScript. The technique discussed provides a foundation that can be built upon for more complex or secure random item selection in any JavaScript application.
Related reading
- Get adjacent elements in a two-dimensional array?
- Get an array of property values from an object array
- Get an array of property values from an object array
- Get difference between two lists with Unique Entries
- get and set in TypeScript
- Get current scroll position of ScrollView in React Native
- Get difference between two lists with Unique Entries
- Get exception description and stack trace which caused an exception, all as a string

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
Data Structures & Algorithms practice on Codemia
Step through 300 algorithm problems with animated visualisers that show the data structure changing as the code runs.