@vtaeke

Как сделать функцию вопрос-ответ?

Всем привет. Возникла трудность с написанием скрипта.
Необходимо реализовать функцию, вопрос-ответ.
Накидал список из вопросов и ответов.
let arrayQA = [
  {
    question: "Привет",
    answer: ["Привет", "Здравствуйте", "Доброго времени суток"],
  },
  {
    question: "Как дела?",
    answer: ["Хорошо", "Отлично", "Лучше всех, надеюсь и у вас так же"],
  },
];


Пытаюсь понять как реализовать функцию, чтобы на ввод текста - получать ответ из колонки answer.
При выводе получается undefined.

И еще как понимаю можно сделать по проверки слов полностью, то это можно сделать через toLowerCase(). Но для начала вообще хочу разобраться с логикой всего этого действия. Как все-таки подступить к этому правильно.
// получение значения из input
function getInputValue() {
  let textInput = document.getElementById("input__text").value;
  return textInput;
}
// функция на проверку слова
function sendAnswer(arrayQA) {
  if (getInputValue() === "") return "Вы ввели пустое сообщение";
  if (getInputValue().includes(arrayQA)) {
    return randomInteger(answer);
  }
}

// функция на рандомный ответ
function randomInteger(min, max) {
  let rand = min + Math.random() * (max + 1 - min);
  return Math.floor(rand);
}


63bc58e84bbb0541234396.png
  • Вопрос задан
  • 211 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Мне кажется, что для вариантов вопроса тоже стоит использовать массив с несколькими формулировками:
const QA = [
  {
    q: ['Привет', 'Hi', 'Здарова', 'Ы'],
    a: ['Привет', 'Здравствуйте', 'Доброго времени суток'],
  },
  {
    q: ['Как дела?', 'Как жизнь?', 'Как день прошёл?', 'Как настроение?'],
    a: ['Хорошо', 'Отлично', 'Лучше всех, надеюсь и у вас так же'],
  },
];

В целом логика такая:
  1. получили вопрос
  2. нашли, есть ли среди QA подходящая пара, где q.includes(вопрос)
  3. если есть – берём из той же пары свойство a и его случайный элемент

function answer(questionText, QA) {
  if (!questionText || questionText.length === 0) {
    return 'Пустой вопрос - пустой ответ';
  }

  const pair = QA.find(pair => pair.q.map(text => text.toLowerCase()).includes(questionText.toLowerCase()));
  if (!pair) {
    return 'Даже и не знаю, что ответить!..';
  }

  const randomIndex = Math.floor(Math.random() * pair.a.length);
  return pair.a[randomIndex];
}

// использование
answer('Ы', QA);  // Привет
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Wispik
if (getInputValue().includes(arrayQA))
Здесь всегда будет false, потому что getInputValue() это строка, а arrayQA - это массив объектов
Можно сделать так:
let q = arrayQA.find(item => item.question === getInputValue())

В q будет либо null либо объект с нужным вопросом

Ну и это непонятно:
function randomInteger(min, max) // функция принимает на вход 2 числа

return randomInteger(answer); // а здесь почему-то передается несуществующая переменная answer
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
01 мая 2024, в 09:23
5000 руб./за проект
01 мая 2024, в 02:11
5000 руб./за проект
01 мая 2024, в 00:29
2000 руб./за проект