Основная проблема, с которой вы здесь столкнулись, заключается в том, что ваш код написан так, как если бы JavaScript был языком вызовов по ссылке.Это не;это вызов по значению.Таким образом, последняя строка функции является синтаксически правильной, но функционально бесполезной.
Вот случайная последовательность Фишера-Йейтса:
function fyShuffle(a) {
if (a.length < 2) return;
for (var i = a.length; --i >= 1; ) {
var j = ~~(Math.random() * (i + 1)), tmp;
tmp = a[j];
a[j] = a[i];
a[i] = tmp;
}
}