Как случайным образом поменять местами элементы массива? (Array shuffle)
Возьмём простой массив для тестов:
var massiv = [100, 101, 102, 103, 104, 105, 106, 107]
Из этого массива мы хотим получить другой массив, чтобы его элементы были перемешаны относительно оригинального массива. Как это сделать?
Нам поможет конструктор Math и его метод метод random().
Функция перемешивания массива
function mixarr(arr){ return arr.map(i=>[Math.random(), i]).sort().map(i=>i[1]) }
Запускаем тестирование № 1:
mixarr(massiv)

Запускаем тестирование № 2:
mixarr(massiv)

Запускаем тестирование № 3:
mixarr(massiv)

Метод перемешивания массива
Мы можем расширить стандартный набор методов массивов для класса Array.
Array.prototype.mixarr = function (){ return this.map(i=>[Math.random(), i]).sort().map(i=>i[1]) }
Пример работы:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10].mixarr()
[4, 10, 9, 7, 1, 5, 2, 6, 8, 3]

Как работает функция и метод? Логика работы
Мы проходим по каждому элементу массива методом map(). На каждом шаге метода мы возвращаем пары вида:
[ случайное число от 0 до 1 (но не 1) , элемент массива (как есть) ]
Таких пар будет ровно столько, сколько элементов в оригинальном массиве.
Например:

Когда мы получаем массив из массивов, то теперь можем провести сортировку методом sort(). По-умолчанию он будет сортировать по первому элементу вложенных массивов, которые являются случайными числами. Порядок сортировки не имеет значения т. к. любая сортировка автоматически перемешает пары, а значит второй элемент в паре уже будет не на своём первоначальном месте.

После перемешивания пар нам останется только удалить первые элементы внутренних массивов, которые по сути не имеют информационного смысла и нужны только для работы алгоритма. «Удаляем» — это возвращаем только вторые элементы внутренних массивов.
Итог
Элементы массива перемешиваются. Функция меняет местами элементы массива и возвращает новый массив без повреждения оригинального.
Информационные ссылки
JavaScript | Случайный элемент массива
Стандарт ECMAScript — Раздел «21.3.2.27 Math.random ( )» — https://tc39.es/ecma262/#sec-math.random