How to shuffle an array in JavaScript

Shuffling arrays is crucial for randomizing data presentation, creating quiz questions, implementing card games, and providing varied user experiences in JavaScript applications. With over 25 years of experience in software development and as the creator of CoreUI, I’ve implemented array shuffling in components like image galleries, testimonial carousels, and dashboard widgets where randomized content keeps interfaces fresh and engaging. From my extensive expertise, the most mathematically sound and efficient solution is implementing the Fisher-Yates shuffle algorithm, which ensures truly uniform random distribution. This approach is unbiased, performant, and provides the gold standard for array randomization in computer science.

Use the Fisher-Yates shuffle algorithm to randomly reorder array elements.

const array = [1, 2, 3, 4, 5]
for (let i = array.length - 1; i > 0; i--) {
  const j = Math.floor(Math.random() * (i + 1))
  ;[array[i], array[j]] = [array[j], array[i]]
}
// Result: randomly shuffled array

The Fisher-Yates algorithm works by iterating backwards through the array, swapping each element with a randomly selected element from the remaining unshuffled portion. Starting from the last element, Math.random() * (i + 1) generates a random index from 0 to the current position, and the destructuring assignment [array[i], array[j]] = [array[j], array[i]] swaps the elements. This ensures each possible permutation has an equal probability of occurring, creating a truly uniform shuffle.

Best Practice Note:

This is the same approach we use in CoreUI components for randomizing content displays and creating varied user interface experiences across our component library. To avoid mutating the original array, create a copy first: const shuffled = [...array] then shuffle the copy. For functional programming style, wrap this in a function that returns the shuffled copy. This algorithm has O(n) time complexity and is significantly better than naive sorting approaches.


Speed up your responsive apps and websites with fully-featured, ready-to-use open-source admin panel templates—free to use and built for efficiency.


About the Author