j0hnik,
ошибок нет, и вполне достаточно, но можно и без while, код будет длиннее, но без лишних генераций, что производительнее. |
Цитата:
еще можно если переменные равны прерывать функцию и запускать заново. но вроде цикл лучше в плане производительности. Как вы производительность оцениваете? может сервис какой есть? |
Цитата:
<!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> |
Спасибо за ссылку =) буду тестить! :thanks:
|
Цитата:
|
количество повторов на 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); |
Рони друг мой я протестил:
и вот какие результаты 1место скрипт пост 7 2место -10% пост 10 3 место -66% твой скрипт МБ я что нитак сделал. (прокоментируй пжл) https://jsperf.com/do на счет первого скрипта я согласен подход не совсем правильный (есть косяк который немного увеличивает вероятность выпадения соседнего цвета, а в остальном вроде никакую опасность не несет) |
j0hnik,
пост №7 -- обращается к несуществующим элементам массива. пост №10 от 5 до 20 % лишних генераций. пост №13 количество повторов и ошибок на 100 генераций ноль!!! по скорости не знаю, что быстрее. |
Цитата:
|
Цитата:
исправленный вариант <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> |
Часовой пояс GMT +3, время: 23:24. |