Я хочу перетасовать список уникальных предметов, но не делаю случайного случайного перетасовки. Я должен быть уверен, что ни один элемент в перетасованном списке не будет находиться в том же месте, что и в исходном списке. Таким образом, если исходный список (A, B, C, D, E), этот результат будет ОК: (C, D, B, E, A), но это не будет: (C, E, A, D, B), поскольку "D" по-прежнему остается четвертым. Список будет содержать не более семи позиций. Крайняя эффективность - это не соображение. Я думаю, что эта модификация Fisher/Yates делает трюк, но я не могу доказать это математически:
function shuffle(data) {
for (var i = 0; i < data.length - 1; i++) {
var j = i + 1 + Math.floor(Math.random() * (data.length - i - 1));
var temp = data[j];
data[j] = data[i];
data[i] = temp;
}
}