Fisher-Yates shuffle
This is what you need for card games! The Fisher-Yates (or Knuth) shuffle ensures that all permutations of the set are equally likely (it’s unbiased).
Here’s the code in ES6 JavaScript, using a function that has an array a passed to it. When it comes to swapping the array elements there are various tricky ways of doing it, but I prefer to just do it in the most obvious way.
function shuffle(a) {
for (let i = a.length - 1; i >= 1; i--) {
let j = Math.floor(Math.random()*(i + 1));
let tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}