Попробуйте, используйте только одну сборку для своего приложения, загрузите и поделитесь ею.
Я написал это некоторое время назад, и так получилось, что вы ищете. Я полагаю, что это случайный случай Фишера-Йейтса, на который ссылается 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);
Ваш первый подход сработает. Просто перемешайте 18 элементов и возьмите первые 12.
Вы должны реализовать тасование Фишера-Йейтса (также известное как тасование Кнута).
Посмотрите на отличный ответ, предоставленный здесь .