BFE.dev #8. can you shuffle() an array?

BFE.dev is like a LeetCode for Front End developers. I’m using it to practice my skills.

This article is about the coding problem BFE.dev#8. can you shuffle() an array?

Analysis

The goal is to shuffle an array, seems pretty easy. Since shuffle is choose one of the all possible permutations, so we can choose the item one by one randomly from rest possible positions.

function shuffle(arr) {
for (let i = 0; i < arr.length; i++) {
const j = i + Math.floor(Math.random() * (arr.length - i))
;[arr[i], arr[j]] = [arr[j], arr[i]]
}
}

Code Not working

function shuffle(arr) {
for (let i = 0; i < arr.length; i++) {
const j = Math.floor(Math.random() * arr.length)
;[arr[i], arr[j]] = [arr[j], arr[i]]
}
}

Above code looks working but actually not. It loops all the positions and randomly swaps with another.

Suppose we have an array of [1,2,3,4].

Let’s look at number 1. The first step is to swap 1 with all 4 positions, chance is high that it is moved to the positions other than itself and later it is traversed and swapped again.

Now let’s look at number 4. It is last number to be traversed, and it might be also swapped before its turn and never be traversed again.

So 1 and 4 have different chances of be swapped, 4 is obviously lower, so the result array is not randomly shuffled.

Passed

Here is my video explaining: https://www.youtube.com/watch?v=FpKnR7RQaHM

Hope it helps, you can have a try at here

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store