Я делаю викторину и хочу узнать, на какую кнопку нажимают больше всего, чтобы дать ответ.
У меня эти переменные в начале установлены на ноль, и их баллы будут увеличиваться при вводе пользователем.
var earthScore = 0;
var venusScore = 0;
всякий раз, когда нажимается кнопка, запускается функция
q1a4.addEventListener ("click", earth);
q1a5.addEventListener ("click", venus);
эта функция добавит единицу к исходным переменным
function earth () {
earthScore += 1;
questionCount += 1;
}
function venus () {
venusScore += 1;
questionCount += 1;
}
теперь я хочу узнать переменную, которая имеет наибольшее количество кликов, и дать ответ пользователю, например; если переменная земли имеет больший балл, чем переменная венера, то я изменю результат на result.innerHTML = 'you are earth'
, но я не знаю, как найти переменную с наибольшим баллом
на самом деле это мой первый проект с использованием js, поэтому у меня не так много идей, и все, что я пытался найти, кажется неправильным, поэтому я был бы очень признателен, если бы кто-нибудь мог дать мне ответ для моей программы.
🤔 А знаете ли вы, что...
С помощью JavaScript можно валидировать данные на стороне клиента, что улучшает пользовательский опыт.
Впоследствии вы можете поместить результаты в массив с помощью:
let tmpArray = [];
tmpArray.push(earth);
tmpArray.push(venus);
tmpArray.sort(function(a, b){return b - a});
Теперь у вас есть самое высокое значение в:
tmpArray[0];
См.: https://www.w3schools.com/js/js_array_sort.asp
Сначала посмотрите на решение:
var earthScore = 0;
var venusScore = 0;
var questionCount = 0;
function handleResult() {
if (earthScore !== venusScore) result.innerText = "you are " + ((earthScore >= venusScore) ? "earth" : "venus");
else result.innerText = "";
}
function earth () { earthScore += 1; questionCount += 1; handleResult(); }
function venus () { venusScore += 1; questionCount += 1; handleResult(); }
let q1a4 = document.getElementById("q1a4");
let q1a5 = document.getElementById("q1a5");
q1a4.addEventListener ("click", earth); q1a5.addEventListener ("click", venus);
let result = document.getElementById("result");
<input type = "button" id = "q1a4" value = "EARTH">
<input type = "button" id = "q1a5" value = "VENUS">
<div id = "result"></div>
Объяснение:
handleResult
, который обновит результат с текущим победителем (или ничего, если у нас ничья)earth
и venus
, как вы изначально определили, за исключением вызова handleResult
также для обработки результатаclick
события для кнопок, как вы указалиРЕДАКТИРОВАТЬ
Давайте посмотрим на пример с 8 элементами, что случайно соответствует количеству планет в Солнечной системе (бедный Плутон)
function handleResult() {
let tie = false;
let maxSoFar = 0;
let plnt = "";
for (let planet of Object.keys(counts)) {
if (counts[planet] > maxSoFar) {
maxSoFar = counts[planet];
tie = false;
plnt = planet;
} else if (counts[planet] === maxSoFar) {
tie = true;
}
}
if (tie) {
result.innerText = ""; //a tie
} else {
result.innerText = "You are " + plnt.toLowerCase();
}
}
let result = document.getElementById("result");
let planets = document.getElementsByClassName("planet");
let counts = {};
for (let planet of planets) {
counts[planet.value] = 0;
planet.addEventListener("click", function() {
counts[this.value]++;
handleResult();
});
}
<input type = "button" class = "planet" value = "MERCURY">
<input type = "button" class = "planet" value = "VENUS">
<input type = "button" class = "planet" value = "EARTH">
<input type = "button" class = "planet" value = "MARS">
<input type = "button" class = "planet" value = "JUPITER">
<input type = "button" class = "planet" value = "SATURN">
<input type = "button" class = "planet" value = "URANUS">
<input type = "button" class = "planet" value = "NEPTUNUS">
<div id = "result"></div>
Объяснение:
handleResult
теперь извлекает ключи объекта counts
(которые являются именами планет), повторяет их и сравнивает их количество с максимальным на данный момент; если больше, то это точно не ничья, а новый максимум и эти значения сохраняются; в противном случае, если счет текущей планеты равен самому высокому счету на данный момент, то у нас ничья (пока); наконец, если текущий счетчик меньше максимального на данный момент, то мы ничего не делаем и позволяем циклу пройти через элементresult
точно так же, как и раньшеcounts
как пустой объектplanets
counts
, имеющего значение 0, например, counts["MERCURY"]
в начале равно 0handleResult