#javascript
#javascript
Вопрос:
Два массива: 1 — userInput содержит символьную строку, введенную пользователем через prompt(). Может содержать от 1 до 61 символа. 2 — letterArray является статическим и содержит 9 символов.
Я создал переменную arrayCount, чтобы найти длину userArray. Мне нужно создать оператор if / else, который будет добавлять случайный символ из letterArray в конец пользовательского ввода, пока arrayCount не станет равен 61, после чего я смогу продолжить выполнение остальной части функции (которая работает у меня).
Я знаю достаточно javascript, чтобы знать, что возможно, но имею лишь смутное представление о том, как этого добиться. Мои попытки до сих пор были тщетными.
Я пробовал .push, но я почти уверен, что мой синтаксис далек от совершенства. Пару часов искал в Интернете большинство моих ответов, почерпнутых из w3schools.com.
Вот как выглядит мой код:
function chartFunction() {
var formInput = prompt("Please enter your phrase", "This eye chart is absolutely fantastic");
var capsInput = formInput.toUpperCase();
var userInput = capsInput.replace(/s /g, '');
var letterArray = ["E", "F", "Z", "K", "L", "O", "I", "D"]
var rand1 = letterArray[Math.floor(Math.random() * letterArray.length)];
var arrayCount = userInput.length
if(arrayCount !== 61) {
userInput.push(letterArray[Math.floor(Math.random() * letterArray.length)]);
} else {
document.write("<p>");
document.write(userInput[0]);
document.write("<p>");
document.write(userInput[1],userInput[2]);
Комментарии:
1. Вы получите лучший ответ, если обновите свой вопрос кодом, который вы пробовали, и примером ввода и ожидаемого результата
2. в вашем коде
userInput
нетArray
so,.push
не будет работать иuserInput
определяется дважды, что неверно
Ответ №1:
В вашем коде вы пытаетесь использовать .push
на string
. С описанием вашей проблемы я пришел к следующему решению, дайте мне знать, если я чего-то не хватает.
function chartFunction() {
const MAX_CHAR = 61;
let userInput = prompt("Please enter your phrase", "This eye chart is absolutely fantastic");
// replace space and convert to uppercase
userInput = userInput.replace(/s /g, '').toUpperCase();
if (userInput.length < MAX_CHAR) {
const letterArray = ["E", "F", "Z", "K", "L", "O", "I", "D"];
const numberOfCharsToGenerate = MAX_CHAR - userInput.length;
/*
Array(numberOfCharsToGenerate) => generates an empty array set with the length specified
.fill('') => fill the empty array set with an empty string, which makes the actual array with value(here value is '')
.map() => modifies the array with the random string
.join() => converts array to string with delimiter ''
*/
userInput = userInput Array(numberOfCharsToGenerate).fill('')
.map(() => letterArray[Math.floor(Math.random() * letterArray.length)]).join('');
}
// printing final 'userInput' and its length
console.log(userInput, userInput.length);
// remaining logic here
}
chartFunction();
Комментарии:
1. Это сработало! Спасибо, спасибо! Вы преобразовали строку в массив с помощью: userInput = userInput Array(numberOfCharsToGenerate).fill(«)?
2.
Array(numberOfCharsToGenerate)
просто сгенерирует пустой набор массивов..fill('')
заполнит массив пустой строкой. Обновил код комментариями