#javascript
#javascript
Вопрос:
Моя цель — задать вопрос, отформатированный точно так:
What is your favourite programming language?
0: JavaScript
1: Python
2: Rust
3: C
Я добился этого путем деструктурирования options
массива внутри poll
объекта внутри resisterNewAnswer()
метода. Я использовал n
, но выглядит ужасно, повторяя его. Я пытался использовать цикл for of, но не уверен, как его реализовать. Я пытаюсь добиться этого внутри resisterNewAnswer()
метода.
const poll = {
question: 'What is your favorite programming language?',
options: ['0: JavaScript', '1: Python', '2: Rust', '3:c '],
answers: new Array(4).fill(0),
registerNewAnswer() {
const [j, p, r, c] = this.options;
prompt(
`What is your favourite programming language? n ${j} n ${p} n ${r} n ${c}`
);
},
};
poll.registerNewAnswer();
Комментарии:
1.
this.options.join('n ')
или что-то еще, чтобы получить единую строку со всеми частями, соединенными вместе2. То, что у вас уже есть, довольно точно…
3. я, наконец, понимаю, чего вы хотите.. вы хотите НЕСКОЛЬКО результатов, верно? я помещаю ответ
Ответ №1:
Вы можете использовать любую из популярных библиотек шаблонов JavaScript: ejs, handlebars или mustache.
Вот пример использования mustache:
const questionTemplate = `
{{question}}
{{#options}}
{{index}}: {{option}}
{{/options}}
`;
const poll = {
question: 'What is your favorite programming language?',
options: ['JavaScript', 'Python', 'Rust', 'C '],
answers: new Array(4).fill(0),
registerNewAnswer() {
prompt(Mustache.render(questionTemplate, {
question: this.question,
options: this.options.map((option, index) => ({option, index})),
}));
},
};
poll.registerNewAnswer();
<script src="https://unpkg.com/mustache@4/mustache.min.js"></script>
За инициалом `
следует игнорировать первый символ новой строки.
Ответ №2:
Просто используйте join
метод для достижения этого:
const poll = {
question: 'What is your favorite programming language?',
options: ['0: JavaScript', '1: Python', '2: Rust', '3: C '],
answers: new Array(4).fill(0),
registerNewAnswer() {
const [j, p, r, c] = this.options;
prompt(
`What is your favourite programming language?n${this.options.join('n')}`
);
},
};
poll.registerNewAnswer();
Ответ №3:
const poll = {
question: 'What is your favorite programming language?',
options: ['0: JavaScript', '1: Python', '2: Rust', '3: c '],
answers: new Array(4).fill(0),
registerNewAnswer() {
const jprc=`n${this.options.join('n')}`
const x=()=>prompt(`What is your favourite programming language? ${jprc}nOr -1 to end entries`) //x becomes a function that prompts you and returns what you input
var i=x()
while(i!=-1){this.answers[i%this.options.length] ;i=x()} //the % logic to prevent incorrect entry(or you can have an if statement that just won't record it if incorrect index)
},
};
poll.registerNewAnswer();
console.log(poll.answers)
Ответ №4:
Одна вещь, которую я бы сделал, это использовать this.question
в приглашении вместо его повторения. Кроме того, объединение опций с помощью join позволит вам упростить, имея возможность использовать разное количество опций.
const poll = {
question: '',
options: [],
answers: new Array(4).fill(0),
registerNewAnswer() {
return prompt(`${this.question}n${this.options.join("n")}`
);
},
};
poll.question = "What is your favorite programming language?";
poll.options = ['0: JavaScript', '1: Python', '2: Rust', '3:c '];
console.log(poll.registerNewAnswer());
poll.question = "Question 2?";
poll.options = ['0: JavaScript', '1: Python', '2: Rust', '3:c '];
console.log(poll.registerNewAnswer());