Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

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

Gool Ученик (210), на голосовании 1 год назад
Всем привет.
Как написать фунцкию ответа на вопросы JS?
У меня есть словарь, по которому нужно пройтись, но не понимаю как.
Все это хозяйство добавляется по кнопке
 let buttonAdd = document.querySelector(".button__add"); 

 let arrayQA = [ 
{
question: "Привет",
answer: ["Привет", "Здравствуйте", "Доброго времени суток"],
},
{
question: "Как дела?",
answer: ["Хорошо", "Отлично", "Лучше всех, надеюсь и у вас так же"],
},
];
 function sendMessage(textInput, arrayQA) { 
let textInput = document.getElementById("input__text").value;
if (textInput === null) return "Вы ввели пустое сообщение";
if (textInput === arrayQA(question)) {
return Math.random(arrayQA(answer));
}
}
Голосование за лучший ответ
Art for Michaelangelo to carve Мудрец (15204) 1 год назад
могу только с моим базовым уровнем сказать что для того чтоб пройтись по всему этому можно использовать for... in
ПавелПросветленный (25631) 1 год назад
for...of.
arrayQA это массив.

for...in для объектов.
Art for Michaelangelo to carve Мудрец (15204) Рукажоп, Ок, пасиб)
Павел Просветленный (25631) 1 год назад
Тебе надо изучить что такое массив и как получить из него значения. Как использовать циклы. Как использовать объекты. И как использовать Math.random.
Твои ошибки:
 if (textInput === null) return "Вы ввели пустое сообщение"; 
У элемента input[type=text] свойство value всегда имеет строковый тип данных. Так что твой textInput никогда не будет равен null.
Правильно так:
 if (textInput) return "Вы ввели пустое сообщение"; 
Так как "falsy" строка может быть только пустой ''.
https://developer.mozilla.org/ru/docs/Glossary/Falsy
 if (textInput === arrayQA(question)) 
Тут уйма ошибок. Во первых доступ к элементу массива осуществляется используя индексы. Во вторых, используются не круглые скобки а квадратные. В третьих, ты пытаешься (пусть и не правильно) проверить единичный элемент, хотя в массиве их два и потенциально может быть гораздо больше. Тут требуется цикл или хотя бы определённый метод массива, например indexOf.
 return Math.random(arrayQA(answer)); 
Math.random() не принимает аргументов. Он возвращает рандомное число от 0 до 1 (не включая).

Правильно так (с данным for циклом новичок должен быть знаком):
 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 "Нет заготовленного ответа. Прости!";
Или так (более современный метод):
 for(const qa of arrayQA){  
if(qa.question == textInput){
return qa.answer[Math.floor(Math.random() * qa.answer.length)];
}
}
return "Нет заготовленного ответа. Прости!";
С такими ошибками тебе надо основы подтягивать. Данная задача не для твоего уровня. Тебе как минимум с массивами надо поиграться перед тем как комбинировать базовые инструкции.
Яков Гото Искусственный Интеллект (321142) 1 год назад
Вот самый простой и понятный, как я думаю, вариант...
 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);
}
Похожие вопросы