Вот моя попытка с помощью сращивания:
var a = [1,2,3,4,5,6,7,8,9,10];var sample = [];
sample.push(a.splice(Math.random()*a.length,1));
sample.push(a.splice(Math.random()*a.length,1));
Облаченный в функции:
function sample_range(range, n) {
var sample = [];
for(var i=0; i<n; i++) {
sample.push(range.splice(Math.random()*range.length,1));
}
return sample;
}
var sample = sample_range([1,2,3,4,5,6,7,8,9,10], 2);
Мы могли бы также наклеить функцию в Array.prototype, чтобы иметь что-то вроде точки синтаксиса нотации:
Array.prototype.sample_range = function(n) {
var sample = [];
for(var i=0;i<n;i++) {
sample.push(this.splice(Math.random()*this.length,1));
}
return sample;
};
var sample = [1,2,3,4,5,6,7,8,9,10].sample_range(2);
Производительность на этом O (диапазон n *). Я бы не предложил его использовать. Вам будет лучше запускать n итераций Knuth shuffle, который будет O (n), если вы предположите, что массив массивов уже создан, в противном случае O (n + range). – Brian