Как я могу получить индекс элемента массива внутри объекта?

#javascript #html #indexof

#javascript #HTML #indexof

Вопрос:

 const questions = [
    {
      "question": "What is the scientific name of a butterfly?",
      "answers": ["Apis", "Coleoptera", "Formicidae", "Rhopalocera"],
      "correctIndex": 3
    },
    {
      "question": "How hot is the surface of the sun?",
      "answers": ["1,233 K", "5,778 K", "12,130 K", "101,300 K"],
      "correctIndex": 1
    },
]
 

Я пытаюсь так поступить, но возвращаю -1:

console.log(questions.findIndex(value => value.answers.indexOf() === 'Apis'));

Например, если я хочу получить indexOf ‘Api’, я получаю -1.

Я пытаюсь сравнить значение ‘CorrectIndex’ со значением массива index of answers и вернуть, если оно правильное или нет.

Комментарии:

1. questions это массив, который может содержать более одного элемента. Что делать, если их больше одного? Знаем ли мы, какой индекс использовать, чтобы перейти к правильному элементу вопрос-ответ, прежде чем получить индекс ответа?

2. value.answers.indexOf() отсутствует аргумент. Почему вы пытаетесь сравнить число со строкой?

3. Вашему вопросу не хватает контекста. Откуда 'Apis' он берется? Как вы узнаете, с каким вопросом в questions нем нужно сравнивать?

Ответ №1:

Если я правильно понял, вы хотите получить индекс элемента в answers массиве этого объекта. попробуйте это:

 console.log(questions.map(value => value.answers.indexOf('Apis')));
 

это даст вам массив индексов, значение которых равно «Api».

Если у вас есть повторяющиеся значения в одном и том же массиве, вы можете сделать это:

 console.log(questions.map(value => [value.answers.indexOf('Apis')]));
 

Это сохранит массив массива, в котором вы можете получить индексы «API» каждого объекта.

Я пытаюсь сравнить значение ‘CorrectIndex’ со значением массива index of answers и вернуть, если оно правильное или нет.

Попробуйте это

 const questions = [
    {
      "question": "What is the scientific name of a butterfly?",
      "answers": ["Apis", "Coleoptera", "Formicidae", "Rhopalocera"],
      "correctIndex": 3
    },
    {
      "question": "How hot is the surface of the sun?",
      "answers": ["1,233 K", "5,778 K", "12,130 K", "101,300 K"],
      "correctIndex": 1
    },
]

console.log(questions.map(value => value.answers.indexOf('Apis') === value.correctIndex)); 

Комментарии:

1. Это потому, что «Api» является первым элементом массива.

2. Вам нужен индекс объекта, в массиве ответов которого есть API?

3. И поэтому, если правильный ответ на «вопрос» «Каково научное название бабочки?» — Rhopalocera, это связано с тем, что ваш «Правильный индекс» установлен на 3. И индекс 3 означает, что это 4-й элемент массива.

4. Добавление других значений по-прежнему возвращает 0

5. Я немного изменил свой ответ. Посмотрите и дайте мне знать, работает ли это.

Ответ №2:

Вы просто неправильно использовали indexOf . Это довольно просто исправить:

 const questions = [
    {
      question: "What is the scientific name of a butterfly?",
      answers: ["Apis", "Coleoptera", "Formicidae", "Rhopalocera"],
      correctIndex: 3
    },
    {
      question: "How hot is the surface of the sun?",
      answers: ["1,233 K", "5,778 K", "12,130 K", "101,300 K"],
      correctIndex: 1
    }
]

questions.forEach(question => {
  console.log(question.answers.indexOf('Apis'))
}); 

Поймите, что indexOf является функцией и возвращает строку.

Комментарии:

1. value.answers.indexOf('Apis')>-1

2. @SulmanMalik вы можете проверить мой фрагмент? Я обновил его, и теперь он работает

Ответ №3:

почему вы сравниваете value.answers.indexOf()

правильный синтаксис должен быть

 console.log(questions.findIndex(value => value.answers.indexOf('element')));