Одним из возможных способов является простое хождение.
Сначала получите список, например, 500 предметов. Получите следующее простое число, которое больше 500. Здесь 503. Выберите случайное начальное число. Это начальное число - это любое число, которое является постоянным для пользователя.
var prime = 503;
var list = ["item1", "item2", ... "item500"];
function pick_nth(seed, n, p, l) {
if(!n) return l[seed % p];
return pick_nth((seed + l.length) % p, n - 1, l);
}
Собрать n-й элемент из списка очень просто. Например:
pick_nth(seed, 0, prime, list); // first item
pick_nth(seed, 1, prime, list); // second item
...
pick_nth(seed, 499, prime, list); // 500th item
Порядок возвращаемых предметов переставляется семенем.