Как найти наибольшее значение в js?

Я делаю викторину и хочу узнать, на какую кнопку нажимают больше всего, чтобы дать ответ.

У меня эти переменные в начале установлены на ноль, и их баллы будут увеличиваться при вводе пользователем.

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, поэтому у меня не так много идей, и все, что я пытался найти, кажется неправильным, поэтому я был бы очень признателен, если бы кто-нибудь мог дать мне ответ для моей программы.

Пожалуйста, предоставьте свой код в виде одного блока кода и включите вашу попытку заставить его работать. Также включите HTML.

trincot 22.07.2023 00:13

Отвечает ли это на ваш вопрос? Функция Javascript max() для 3 чисел

Heretic Monkey 22.07.2023 00:16

Давайте не будем так сильно минусовать новичков. Dua Diy явно пытался решить проблему и наткнулся на блокировщик. Все мы когда-то были новичками, не будем слишком строги.

Lajos Arpad 22.07.2023 00:29

@LajosArpad Согласен, я отформатировал его вопрос так, чтобы его могли понять другие пользователи.

Sadeed_pv 22.07.2023 10:19
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
69
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Впоследствии вы можете поместить результаты в массив с помощью:

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

Не проще ли просто вызвать Math.max(earth, venus)?

Lajos Arpad 22.07.2023 02:25

Все способы работают. Это ответ для кодирования. Это не способ "почему" - это способ "как". В моем примере я подумал сделать систему показателей или что-то подобное.

Stef 22.07.2023 03:00
Ответ принят как подходящий

Сначала посмотрите на решение:

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>

Объяснение:

  • мы инициализируем оценки с 0
  • мы определяем 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 точно так же, как и раньше
  • получаем планеты по имени класса, ибо было бы неудобно получать их отдельно по id, написав 8 строк вместо одной
  • мы инициализируем counts как пустой объект
  • и повторяет planets
  • инициализация количества каждой планеты как члена данных counts, имеющего значение 0, например, counts["MERCURY"] в начале равно 0
  • мы создаем событие для каждой планеты, которое будет происходить при нажатии кнопки планеты, увеличивая количество рассматриваемой планеты и вызывая handleResult

Uncaught SyntaxError: Идентификатор «результат» уже объявлен script.js: 97 js: 97, это строка [let result = document.getElementById ("result");]

dua diy 22.07.2023 00:55

@duadiy эта ошибка говорит вам, что у вас уже была переменная result, и она дублируется. Пожалуйста, попробуйте фрагмент, который я предоставил в своем ответе, нажав «Выполнить фрагмент кода» и дайте мне знать, работает ли он для вас. Если это так, то проблема просто в том, что вы вставили этот код в файл(ы), который у вас уже есть, и некоторые переменные дублируются.

Lajos Arpad 22.07.2023 00:57

Я вижу, что за этот ответ проголосовали против. Я не понимаю, почему за это проголосовали бы даже после повторного прочтения, поскольку мне это кажется правильным. Если бы были добавлены некоторые предложения относительно того, какие недостатки можно найти в этом ответе, они помогли бы мне их улучшить. Спасибо!

Lajos Arpad 22.07.2023 01:22

Я исправил ошибку, и программа работает отлично благодаря вам. У меня также есть вопрос: могу ли я добавить больше переменных и использовать тот же формат, что и выше, чтобы найти наибольшую оценку из 8 переменных? Еще раз спасибо за помощь, я ценю это :)

dua diy 22.07.2023 01:47

Я не знаю, почему за ваш комментарий проголосовали против, потому что я этого не делал, и когда я пытаюсь проголосовать за него, он говорит, что мне нужно больше очков репутации, чтобы проголосовать.

dua diy 22.07.2023 01:49

@duadiy да, вы также можете применить его с восемью переменными. Позвольте мне отредактировать мой ответ с помощью примера примера.

Lajos Arpad 22.07.2023 02:01

@duadiy реализовал его для 8 планет. Я знаю, что вы не проголосовали против. stackoverflow позволит вам голосовать только тогда, когда вы наберете 25 баллов. Но я не знаю, почему за этот ответ проголосовали, потому что он кажется мне правильным. Я полагаю, голосующему против не понравился тот факт, что я ответил на вопрос новичка. Если это так, то я не согласен с отрицательным голосованием, потому что, по моему мнению, сама причина существования этого сайта заключается в том, чтобы убедиться, что платформу можно использовать для запросов и получения технической помощи, в том числе для новичков. Все когда-то были новичками, но некоторые забыли об этом.

Lajos Arpad 22.07.2023 02:22

@duadiy Как ни странно, другой ответ, который не дает полного ответа и чрезмерно усложняет частичный ответ, к которому он обращается, всю мысль можно было бы выполнить с помощью Math.max(earth, venus) (при условии, что earth и venus были правильно инициализированы) вместо создания массива, помещения в него двух значений и сортировки.

Lajos Arpad 22.07.2023 02:25

я понимаю ваш ответ 8 планет, но дело в том, что в моей программе кнопки id = q1a1, q1a2 и т. д. и. значение - это имя, такое как красный, желтый и т. д., которое затем соответствует такой планете var q1a1 = document.getElementById ("q1a1");. q1a1.addEventListener ("click", mars);

dua diy 22.07.2023 06:53

Я как бы делаю викторину в стиле BuzzFeed, где пользователь дает ответ на случайные вопросы, которые затем соответствуют планете. Для простоты я добавил 8 вариантов ответа на каждый вопрос, чтобы каждый ответ был связан с планетой, и у меня также есть 9 вопросов, поэтому независимо от того, какой результат не может быть равным

dua diy 22.07.2023 06:58

Я попытался добавить эту функцию, но дело в том, что если я выбираю 2 планеты поочередно (Земля и Венера), то earthScore = 4 , venusScore = 5, но поскольку цикл проверяет только большее, чем 2, он останавливает цикл и дает ответ «Земля-задница», даже если Венера правильная, и я не могу сделать больше 4, потому что если пользователь выбирает каждую планету в каждом вопросе, то в вопросе 9 только одна из планет будет иметь оценку 2, и у меня не будет ответа. function updateResult() { if (earthScore >= 2) { result.innerHTML = 'you are earth'} else if (venusScore > 2) { result.innerHTML = "you are venus"

dua diy 22.07.2023 07:14

спасибо за помощь и извините за беспокойство, но я все еще новичок в старшей школе, и я люблю делать викторины BuzzFeed, поэтому я подумал, что сделаю один. Я смотрю курс, но в нем всего 3 вопроса, и, поскольку я интересуюсь астрономией, я думал, что сделаю один из планет, но я не знал, насколько это будет сложнее, чем викторина из 3 вопросов и 2 вариантов ответа.

dua diy 22.07.2023 07:25

@duadiy, тогда вы можете искать свои элементы как document.querySelectorAll("#q1a1,#q1a2,#q1a3,#q1a4,#q1a5,#q1‌​a6,#q1a7,#q1a8") Я рекомендую добавить класс к вашим элементам, чтобы сделать его более универсальным. Представьте, что у вас есть 200 предметов. Или 2000. Также я бы не стал создавать функцию для каждого элемента. Представьте, что у вас есть 10000 элементов. Будет ли возможно иметь 10000 отдельных функций или лучше иметь очень мало функций, охватывающих обобщенный шаблон? Конечно, это последнее. Вот почему я создал переменную counts и добавил в нее ключи, чтобы можно было повторно использовать один и тот же шаблон...

Lajos Arpad 22.07.2023 12:58

@duadiy ... для каждого элемента. Мой второй код Javascript будет работать, даже если у вас будет 200 или 20000 или любое другое количество планет. Это важный урок программирования. Вам нужно, чтобы ваш код был как можно более независимым от ввода, именно так вы можете написать мощный код. Ничья может быть даже при 9 вопросах. Представьте себе случай, когда Земля и Венера выбирались 4-4 раза, а Уран - 1 раз. В этом случае была бы связь между Землей и Венерой. Возможным решением для разрыва некоторых ничьих было бы наличие дополнительного бонусного вопроса, который отображается только в случае ничьей.

Lajos Arpad 22.07.2023 13:10

@duadiy, и можно будет выбрать только варианты связанных планет. Итак, если есть связь между Землей и Венерой, то вы показываете дополнительный вопрос, и отображаются только варианты Земли и Венеры. Возможно, вы захотите задать новый вопрос с вашим текущим кодом. Кажется, это новая проблема для решения, которая выходит за рамки комментария. В новом вопросе поделитесь своим точным кодом в виде фрагмента, где проблема может быть воспроизведена, и сообщите мне здесь, в разделе комментариев. Пожалуйста, не беспокойтесь о том, чтобы задавать вопросы. я рад помочь

Lajos Arpad 22.07.2023 13:18

@duadiy причина, по которой 3 элемента сложнее, чем два, заключается в том, что в конкретном случае, когда у вас есть только два элемента, вы можете просто сравнить их, тогда как в случае 3 вам нужно найти максимум. К счастью, это несложный паттерн, так что, если вы уже в нем разбираетесь, вы можете его обобщить.

Lajos Arpad 22.07.2023 13:19

я добавил планету класса к каждой кнопке, но теперь кнопки не работают, так как функции не определены, и я не понимаю документ. запрос, потому что я думаю, вы сказали добавить его, если у меня нет классовой планеты, но теперь у меня есть

dua diy 22.07.2023 13:57

@duadiy, пожалуйста, создайте новый вопрос с вашим текущим кодом и напишите здесь комментарий. Это позволит мне помочь вам. Какое имя класса вы добавили? Если это planet, то document.getElementsByClassName("planet") должно давать эти элементы.

Lajos Arpad 22.07.2023 14:32

Давайте продолжим обсуждение в чате.

dua diy 22.07.2023 14:35

Другие вопросы по теме