Я написал это некоторое время назад, и так получилось, что вы ищете. Я полагаю, что это случайный случай Фишера-Йейтса, к которому относится ojblass:
Array.prototype.shuffle = function() {
var i = this.length;
while (--i) {
var j = Math.floor(Math.random() * (i + 1))
var temp = this[i];
this[i] = this[j];
this[j] = temp;
}
return this; // for convenience, in case we want a reference to the array
};
Обратите внимание, что изменение Array.prototype может считаться плохой формой. Возможно, вы захотите реализовать это как автономный метод, который принимает массив в качестве аргумента. Во всяком случае, чтобы закончить это:
var randomSubset = originalArray.shuffle().slice(0,13);
Или, если вы не хотите изменять оригинал:
var randomSubset = originalArray.slice(0).shuffle().slice(0,13);