Я бы использовал что-то вроде filter () , а не slice () , после генерации 3 уникальных чисел в вашем диапазоне:
var rnd1, rnd2, rnd3, undef,
items = $('item', d);
// Generate our random numbers:
rnd1 = Math.floor(Math.random()*items.length);
while (rnd2 == undef || rnd2 == rnd1)
rnd2 = Math.floor(Math.random()*items.length);
while (rnd3 == undef || rnd3 == rnd1 || rnd3 == rnd2)
rnd3 = Math.floor(Math.random()*items.length);
//filter our items, only the ones whose index matches one of our randoms:
items.filter(function (index) {
return index == rnd1 || index == rnd2 || index == rnd3;
}).each(function {
// rest of code...
});
Имейте в виду, что это может застрять в бесконечном цикле, если количество возвращаемых элементов меньше 3, поскольку оно генерирует 3 уникальных числа в диапазоне 0 - длина элементов .Вы могли бы убрать циклы while и просто сгенерировать 3 неуникальных рандома, если бы это было возможно.
Вот пример, который удаляет 3 делителя случайным образом с помощью этого кода: http://jsfiddle.net/dAjAt/. Keepнажав кнопку Run , чтобы увидеть ее в действии.