@Islam777

Почему выходит undefined?

let people = [
  { name: "Егор", "Это самец?": true, "Это девушка?": false },
  { name: "Залина", "Это самец?": false, "Это девушка?": true },
];

let questions = [
  "Это самец?",
  "Это девушка?",
  // "Он(а) носит очки?",
  // "Он(а) занимаеться спортом?",
  // "У этого человека смуглая кожа?",
];

let questionInGame = document.querySelector(".question");

function questFunc() {
  let randNum = _.shuffle(_.range(0, questions.length)).slice(0, 1);
  questionInGame.innerHTML = questions[randNum];
  return questions[randNum];
}
questFunc();
alert(people[`${questFunc()}`]);
  • Вопрос задан
  • 141 просмотр
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
  1. randNum содержит число.
  2. questFunc() возвращает строку с текстом вопроса.
  3. people[`${questFunc()}`] это, например, people["Это девушка?"] – будет undefined.
    Массив people не имеет строкового ключа. В нём два элемента с индексами 0 и 1.

Я бы предложил не дублировать текст вопросов, а работать с их индексами. Так лаконичнее:
spoiler
const questions = [
  'Это самец?',
  'Это девушка?',
  'Носит очки?',
  'Занимается спортом?',
  'У этого человека смуглая кожа?',
];
const people = [
  { name: 'Егор', profile: [1, 0, 1, 1, 1] },
  { name: 'Залина', profile: [0, 1, 1, 1, 0] },
];

const questionElement = document.querySelector('.question');

let questionIndex; // индекс текущего вопроса
function askQustion() {
  questionIndex = Math.floor(Math.random() * questions.length);
  questionElement.innerHTML = questions[questionIndex];
  return questions[questionIndex];
}

askQustion();

// TODO: принять ответ пользователя (true/false)
const answer = true; // допустим, ответил "да"

const candidates = people
  .filter(({ profile }) => !!profile[questionIndex] === answer)
  .map(({ name }) => name)
  .join(', ');

console.log('Кандидаты:', candidates);
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы