Пытаюсь заменить одинаковые буквы в массиве, для этого устанавливаю флаг isUniq = false; если буквы неуникальны. Проверка букв проходит в дополнительном цикле do while, в итоге происходит бесконечный цикл и браузер начинает зависать.
Чтобы протестировать, как работает замена я убрала do while и добавила ключевое слово “smena” и вывожу через console.log. В итоге код работает если буквы повторяются то выводится “smena”, как например с буквой “Щ” которая встречается в массиве два раза. Пример на картинке.
img.jpg
Однако с флагом происходит зависания браузера из-за невозможности завершить цикл. Как исправить? Вот код:
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<script>
var bukvy = ['А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ж', 'З',
'И', 'Й',
'К', 'Л', 'М', 'Н', 'О', 'П', 'Р',
'С', 'Т', 'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я'];
var slovo;
var word1='лес';
slovo = word1.split("");
var isUniq;
function showInfo()
{
for (var i = slovo.length; i < 16; i++)
{
do
{
isUniq = true;
word1 = bukvy[Math.trunc(Math.random()*bukvy.length)];
for (var j=0; j<=i-2;j++)
{
if(slovo[j]==word1)
{
isUniq = false;
// console.log("smena");
}
}
}while(isUniq)
slovo[i]=word1;
//console.log(slovo[i]);
}
}
</script>
</head>
<body onload="showInfo()">
</body>
</html>