Answer
t.me/js_testОтвет:
function generatePassword() {
const numbers = "0123456789",
upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
lowerChars = "abcdefghijklmnopqrstuvwxyz",
symbols = "!@#$%";
const result = [];
result.push(getRandomChar(numbers));
result.push(getRandomChar(numbers));
result.push(getRandomChar(upperChars));
result.push(getRandomChar(upperChars));
result.push(getRandomChar(lowerChars));
result.push(getRandomChar(lowerChars));
result.push(getRandomChar(symbols));
result.push(getRandomChar(symbols));
return shuffleArray(result).join("");
}
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
function getRandomChar(str) {
return str[Math.floor(Math.random() * str.length)];
}
Объяснение:
Для начала напишем две вспомогательные функции getRandomChar которая с помощью Math.random возвращает случайный символ из переданной строки и функцию shuffleArray которая использует Тасование Фишера — Йетса для случайного перемешивания массива. Теперь в основной функции зададим четыре константы numbers, upperChars, lowerChars и symbols они нужны нам для соблюдения условия. Далее создадим массив result и запушим в него по два случайных символа из наших констант, затем перемешаем наш массив, соединим его в строку и вернём.
Код для проверки:
function generatePassword() {
const numbers = "0123456789",
upperChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
lowerChars = "abcdefghijklmnopqrstuvwxyz",
symbols = "!@#$%";
const result = [];
result.push(getRandomChar(numbers));
result.push(getRandomChar(numbers));
result.push(getRandomChar(upperChars));
result.push(getRandomChar(upperChars));
result.push(getRandomChar(lowerChars));
result.push(getRandomChar(lowerChars));
result.push(getRandomChar(symbols));
result.push(getRandomChar(symbols));
return shuffleArray(result).join("");
}
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
function getRandomChar(str) {
return str[Math.floor(Math.random() * str.length)];
}
console.log(generatePassword()); // Например 4i%X5uY@
console.log(generatePassword()); // Например %m44ELp%
console.log(generatePassword()); // Например Zfj@O82@