@Misha5
профессиональный бомж

Как сравнить от 4 объектов за раз и вернуть с наибольшим значением?

Допустим я делаю викторину: вопрос + 4 варианта ответа.

Каждый ответ даёт +1 в один из объектов:
Var x
Var y
Var z
z +=1

Как потом добавить все 4 объекта в один массив results и вывести наибольший по значению?

P.S. Результат должен выводить имя объекта, не его значение.

P.P.S. если будут два объекта с одинаковым значением выводить оба объекта.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 1
Чтобы сравнить несколько объектов за раз вам необходимо хранить их в массиве, а не в отдельных переменных. При этом если важно иметь какую-то вспомогательную информацию (например название варианта ответа), в то в качестве элементов массива можно хранить объект с нужными свойствами.

Набросал простой пример (требует ES6+).

Представим, что вопрос это объект вида:
var question = {
  'text': 'Текст вопроса',
  'answers': [
    {'name': 'X', 'text': 'Вариант X', 'value': 0},
    {'name': 'Y', 'text': 'Вариант Y', 'value': 0},
    {'name': 'Z', 'text': 'Вариант Z', 'value': 0}
  ]
}


потом пользователь что-то выбрал, мы отметили это в объекте с вопросом
question.answers[1].value += 1; // выбрали Y (как второй элемент в массиве вариантов ответа)
question.answers.find(answer => answer.name === 'Z').value += 1; // выбрали Z (нашли нужный элемент по имени)


Теперь просто находим максимальное значение среди всех ответов
var maxAnswerValue = Math.max(...question.answers.map(answer => answer.value), 0); // оно будет равно 1


И формируем массив из ответов, у которых значение соответствует максимальному
var result = question.answers.filter(answer => answer.value == maxAnswerValue);


т.е. result у нас это
[{'name': 'Y', 'text': 'Вариант Y', 'value': 1}, {'name': 'Z', 'text': 'Вариант Z', 'value': 1}]

то мы можем вывести как названия, так и значения

console.log('Выбранные ответы:');
for (answer of result) {
    console.log(`${answer.text} (${answer.name}): ${answer.value}`);
}

Выбранные ответы:
Вариант Y (Y): 1
Вариант Z (Z): 1
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
NeiroNx
@NeiroNx
Программист
Я так и не понял чего же ему сравнить надо, но максимальное находится так:
var x=4,y=3,z=10;
Math.max(x,y,z)
10
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы