Показать сообщение отдельно
  #9 (permalink)  
Старый 06.06.2014, 05:45
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,563

Вот функция:
function rand(max, min, length){
	var result = [],
		resultSorted = [];

	if(typeof max !== 'number') return Math.random();
	if(typeof min !== 'number') return Math.floor(Math.random() * ++max);

	if(min > max) min = [max, max = min][0];                 

	if(!length || typeof length !== 'number') return Math.floor(Math.random() * (max - min + 1)) + min;

	if(length > max - min + 1) throw new RangeError('invalid length.');

	for(var j = 0, random, index; j < length; j++, max--){
		random = Math.floor(Math.random() * (max - min + 1)) + min;

		for(index = j; index && resultSorted[index-1] <= random; index--) random++; 

		result.push(random);
		resultSorted.splice(index, 0, random);
	}

	return result;
}

Генерирует массив не повторяющихся рандомных чисел из заданного диапазона заданной длины. Кое что ещё можно пооптимизировать, но суть должна быть понятна.
__________________
29375, 35

Последний раз редактировалось Aetae, 06.06.2014 в 05:51.
Ответить с цитированием