Добавляйте случайные значения из Array1 в Array2, пока не будет выполнено условие

#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('') заполнит массив пустой строкой. Обновил код комментариями