 
			
				30.05.2017, 23:08
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 j0hnik, 
ошибок нет, и вполне достаточно, но можно и без while, код будет длиннее, но без лишних генераций, что производительнее. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				30.05.2017, 23:14
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.12.2016 
					
					
					
						Сообщений: 3,650
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от рони
			 
		
	 | 
 
	
		j0hnik, 
ошибок нет, и вполне достаточно, но можно и без while, код будет длиннее, но без лишних генераций, что производительнее.
	 | 
 
	
 
 напишите как вы видите =)
 
еще можно если переменные равны прерывать функцию и запускать заново. но вроде цикл лучше в плане производительности. 
Как вы производительность оцениваете? может сервис какой есть?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				30.05.2017, 23:35
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от j0hnik
			
		
	 | 
 
	| 
		Как вы производительность оцениваете?
	 | 
 
	
 
 если повторения не нужны, зачем их генерировать? скрипт будет "ждать" пока rand == rand2  - сервис  https://jsperf.com/
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
</head>
<body>
  <div id="id" style="display: block; width: 200px; height: 200px; border: 1px solid grey;"></div>
  <script>
function rand(a) {
    a = a.slice(0);
    var c = a.length - 1;
    return function() {
        var b = Math.floor(Math.random() * c),
            b = a.splice(b, 1)[0];
        a.push(b);
        return b
    }
};
  var color = ['red','green','blue','orange','yellow','violet','cyan'];
  var r = rand(color);
    document.getElementById("id").onmouseover = function(){
    this.style.backgroundColor = r();
  };
</script>
</body>
</html>
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.05.2017, 00:05
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.12.2016 
					
					
					
						Сообщений: 3,650
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Спасибо за ссылку =) буду тестить!    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.05.2017, 00:08
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от j0hnik
			
		
	 | 
 
	| 
		буду тестить!
	 | 
 
	
 
 с while в данном случае не критично, на 100 генераций будет примерно 5-8 лишних.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.05.2017, 00:12
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				количество повторов на 100 генераций
			 
			
		
		
		
		j0hnik,
  
var rand2, rand;
    var n = 0;
    for (var i=0; i<100; i++)  { rand = Math.floor(Math.random() * 6);if(rand2==rand)n++; rand2=rand}
    alert(n);
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось рони, 31.05.2017 в 00:15.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.05.2017, 02:41
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.12.2016 
					
					
					
						Сообщений: 3,650
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Рони друг мой я протестил: 
и вот какие результаты 
1место скрипт пост 7 
2место -10% пост 10 
3 место -66% твой скрипт 
МБ я что нитак сделал. (прокоментируй пжл)
 https://jsperf.com/do
на счет первого скрипта я согласен подход не совсем правильный (есть косяк который немного увеличивает вероятность выпадения соседнего цвета, а в остальном вроде никакую опасность не несет)  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.05.2017, 03:04
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 j0hnik, 
пост №7 -- обращается к несуществующим элементам массива. 
пост №10  от 5 до 20 % лишних генераций. 
пост №13 количество повторов и ошибок на 100 генераций ноль!!! по скорости не знаю, что быстрее. 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.05.2017, 03:14
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.12.2016 
					
					
					
						Сообщений: 3,650
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от рони
			 
		
	 | 
 
	
		j0hnik, 
обращается к несуществующим элементам массива.
	 | 
 
	
 
 почему? мы же сначала отняли 1 поэтому потом можем добавить и не вылетим за рамки color.length  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				31.05.2017, 03:31
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от j0hnik
			
		
	 | 
 
	| 
		почему?
	 | 
 
	
 
 потому что когда rand2 === rand  и rand = 6 то ++rand будет 7 --- а элемента с таким индексом нет
 
исправленный вариант 
 
<head>
  <meta charset="utf-8">
</head>
<body>
  <div id="id" style="display: block; width: 200px; height: 200px; border: 1px solid grey;"></div>
  <script>
  var rand2;
    document.getElementById("id").onmouseover = function(){
    var color = ['red','green','blue','orange','yellow','violet','cyan']
    var rand = Math.floor(Math.random()*color.length);
    if (rand2 === rand) rand = ++rand%color.length;
    this.style.backgroundColor = color[rand];
    rand2 = rand;
  };
</script>
</body>
 
		
	
		
		
		
		
		
		
		
						  
				
				Последний раз редактировалось рони, 31.05.2017 в 03:35.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |