Я собираю онлайн-викторину и хотел бы построить много вопросов. Я сделал конструктор класса (см. ниже). И я настроил переменные для ввода, разные для каждого вопроса. Я хотел бы повторить их конструкцию, но я не вижу, как перебирать и увеличивать имена объектов (например, q1, q2 и т. д.) и аргументы, которые я передаю (например, answer0, answer1 и т. д.), используя конструктор. Любая помощь будет очень признательна! Я думаю, что это имеет смысл, если вы посмотрите на код ниже. Я знаю, что должен быть более эффективный способ.
let quest = []; //array of question objects
//question constructor
class Question {
constructor(question, answer, hint, icon, congrats, image, location) {
this.answer = answer;
this.congrats = congrats;
this.hint = hint;
this.icon = icon;
this.image = image;
this.location = location;
this.question = question;
this.pushToQuest = function () {
quest.push(this);
};
this.pushToQuest();
}
}
// Question 0 input (actual text removed)
let question0 = "?";
let answer0 = ["", "", "", "", ""];
let hint0 = ["", "", "", "", ""];
let icon0 = "fa-utensils-alt";
let image0 = "img/001.jpg";
let congrats0 = "That's right.... ";
let location0 = '';
const q0 = new Question(
question0,
answer0,
hint0,
icon0,
congrats0,
image0,
location0
);
let questions = [{ "q" : "What is ....", "a" : "It is a ....", "hint":"It is grey", "icon":"🐘", "congrats": "You guessed the elephant","image":"elephant.jpg","location":"Africa" }, { "q" : "What is ....", "a" : "It is a ....", ... }, .... ]
Тогда вы можете использовать questions.forEach(q => Object.entries(q).forEach....)
@mplungjan Я понял, что если бы он сделал это, класс Question
вообще не имел бы никакого смысла, поскольку все, что делает класс Question, — это помещает объекты, которые выглядят не слишком похожими на это, в массив quest
Спасибо, для уточнения я выложил 1 пример, но есть еще десятки вопросов в том же формате.
@TKoL Да, точно. Нет смысла в классе вопросов
@ChrisRichardson Пожалуйста, перезагрузите, чтобы увидеть мой обновленный комментарий
@ChrisRichardson вопросы исходят из базы данных или что-то в этом роде? Как их получить в коде?
Возможным решением будет создание файла json, содержащего список объектов вопросов, подобных этому.
[
{
"question": "some question",
"answer": ["", "", "", "", ""];
"hint": ["", "", "", "", ""];
"icon": "fa-utensils-alt";
"image": "img/001.jpg";
"congrats": "That's right.... ";
"location": "";
},
{
"question": "some question",
"answer": ["", "", "", "", ""];
"hint": ["", "", "", "", ""];
"icon": "fa-utensils-alt";
"image": "img/001.jpg";
"congrats": "That's right.... ";
"location": "";
}
]
Затем извлеките данные и используйте цикл for для каждого, чтобы создать конструктор и добавить каждый конструктор в список квестов.
async function (fetchedJson) {
fetchedJson.forEach((item) => {
const que = new Question(
item.question,
item.answer,
item.hint,
item.icon,
item.image,
item.congrats,
item.location
)
quest.push(que)
})
}
Простите мой код, если есть синтаксические ошибки, потому что я печатаю с планшета
Спасибо, это очень полезно
В основном мой комментарий в ответ
Там нечего прокручивать. У вас есть только один вопрос, один ответ... одно место