Top.Mail.Ru
Ответы

Как написать фунцкию ответа на вопросы JS?

Всем привет.
Как написать фунцкию ответа на вопросы JS?
У меня есть словарь, по которому нужно пройтись, но не понимаю как.
Все это хозяйство добавляется по кнопке

1
 let buttonAdd = document.querySelector(".button__add"); 


12345678910
 let arrayQA = [ 
  { 
    question: "Привет", 
    answer: ["Привет", "Здравствуйте", "Доброго времени суток"], 
  }, 
  { 
    question: "Как дела?", 
    answer: ["Хорошо", "Отлично", "Лучше всех, надеюсь и у вас так же"], 
  }, 
]; 
1234567
 function sendMessage(textInput, arrayQA) { 
  let textInput = document.getElementById("input__text").value; 
  if (textInput === null) return "Вы ввели пустое сообщение"; 
  if (textInput === arrayQA(question)) { 
    return Math.random(arrayQA(answer)); 
  } 
} 
По дате
По рейтингу
Аватар пользователя
Просветленный

Тебе надо изучить что такое массив и как получить из него значения. Как использовать циклы. Как использовать объекты. И как использовать Math.random.
Твои ошибки:

1
 if (textInput === null) return "Вы ввели пустое сообщение"; 

У элемента input[type=text] свойство value всегда имеет строковый тип данных. Так что твой textInput никогда не будет равен null.
Правильно так:

1
 if (textInput) return "Вы ввели пустое сообщение"; 

Так как "falsy" строка может быть только пустой ''.
https://developer.mozilla.org/ru/docs/Glossary/Falsy

1
 if (textInput === arrayQA(question)) 

Тут уйма ошибок. Во первых доступ к элементу массива осуществляется используя индексы. Во вторых, используются не круглые скобки а квадратные. В третьих, ты пытаешься (пусть и не правильно) проверить единичный элемент, хотя в массиве их два и потенциально может быть гораздо больше. Тут требуется цикл или хотя бы определённый метод массива, например indexOf.

1
 return Math.random(arrayQA(answer)); 

Math.random() не принимает аргументов. Он возвращает рандомное число от 0 до 1 (не включая).

Правильно так (с данным for циклом новичок должен быть знаком):

123456
 for(let i = 0; i < arrayQA.length; i++){  
  if(textInput == arrayQA[i].question){  
    return arrayQA[i].answer[Math.floor(Math.random() * arrayQA[i].answer.length)];  
  }  
}  
return "Нет заготовленного ответа. Прости!"; 

Или так (более современный метод):

123456
 for(const qa of arrayQA){  
  if(qa.question == textInput){  
    return qa.answer[Math.floor(Math.random() * qa.answer.length)];  
  }  
}  
return "Нет заготовленного ответа. Прости!"; 

С такими ошибками тебе надо основы подтягивать. Данная задача не для твоего уровня. Тебе как минимум с массивами надо поиграться перед тем как комбинировать базовые инструкции.

Аватар пользователя
Искусственный Интеллект

Вот самый простой и понятный, как я думаю, вариант...

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
 let arrayQA = [  
  {  
    question: "Привет",  
    answer: ["Привет", "Здравствуйте", "Доброго времени суток"],  
  },  
  {  
    question: "Как дела?",  
    answer: ["Хорошо", "Отлично", "Лучше всех, надеюсь и у вас так же"],  
  }, 
]; 
 
// Из вводных данных нужен только массив 
 
function sendMessage(array) { 
 
   // Объявить переменные со всеми значениями 
   // Переменная answer будет выполнять промежуточную роль 
 
   let value = document.getElementById("input__text").value; 
   let blank = 'Вы ввели пустое сообщение'; 
   let error = 'Некорректное сообщение!!!'; 
   let answer = ''; 
 
   // Пройтись по массиву с объектами циклом forEach 
 
   array.forEach((e,i,a) => { 
 
      // Если value совпадает с одним из вопросов, рандомизировать и записать в answer 
 
      if (value === e.question) answer = e.answer[Math.floor(Math.random() * e.answer.length)]; 
 
      // Если answer пустая и цикл завершен, записать новые значения 
      // Пустое сообщение, есть строка value пуста, или сообщение об ошибке, если в value что-то есть 
 
      if (i === a.length-1 && answer === '') value === '' ? answer = blank : answer = error; 
 
   }); 
 
   // Вывести результат работы функции 
 
   return alert(answer); 
    
} 
 
document.querySelector('.button__add').onclick = () => { 
   sendMessage(arrayQA); 
} 
Аватар пользователя
Мудрец

могу только с моим базовым уровнем сказать что для того чтоб пройтись по всему этому можно использовать for... in