Подсчет результатов в массиве

С помощью регулярного выражения и Greasemonkey у меня есть массив результатов, который выглядит примерно так:
choice1, choice2, choice3, choice3, choice1, etc..

Мой вопрос в том, как мне подсчитать варианты, чтобы я знал, сколько раз choice1 находится в массиве, choice2 находится в массиве и т.д., если я не знаю точно, сколько вариантов есть или что они есть.

Конечная цель - создать сценарий Greasemonkey, который хранит количество голосов, полученных каждым выбором на нескольких страницах (возможно, с использованием gm_setvalue, хотя я открыт для других идей).

Спасибо!

Поведение ключевого слова "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) для оценки ваших знаний,...
2
0
304
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Не уверен на 100%, что вы ищете, но я думаю, что это он.

  // Original data
    var choices = [
        "choice 1",
        "choice 1",
        "choice 2",
        "choice 3",
        "choice 3",
        "choice 3",
        "choice 3",
        "choice 3",
        "choice 3",
        "choice 4",
        "choice 4",
        "choice 4"];


    //Create the results array
    var result = new Object();

    for (var choice in choices) {
        if (result[choices[choice]] === undefined)
            result[choices[choice]] = 1;
        else
            result[choices[choice]]++;
    }

    //Print result
    var str = "";

    for (var item in result)
        str += item + ": " + result[item] + "<br />";


    document.getElementById("resultDiv").innerHTML = str;

Выход:

choice 1: 2
choice 2: 1
choice 3: 6
choice 4: 3

Несколько предложений: - Обратите внимание, что переменная "result" действительно должна быть объектом, а не массивом, поскольку использование свойств объекта в массиве часто приводит к путанице. - При использовании конструкции for..in рекомендуется использовать hasOwnProperty.

J c 07.12.2008 23:46

- Конструкция for..in может работать не так, как вы ожидали, в массиве choices. - Оператор if действительно должен проверять === undefined, а не полагаться на истинность (undefined == null).

J c 07.12.2008 23:48
Ответ принят как подходящий

Один из способов - перебирать варианты и увеличивать счетчик, связанный с каждым уникальным выбором в свойстве объекта.

Пример:

var choiceCounts = {};
for (var iLoop=0; iLoop < aChoices.length; iLoop++) {
  var keyChoice = aChoices[iLoop];
  if (!choiceCounts[keyChoice]) {
    choiceCounts[keyChoice] = 1;
  } else {
    choiceCounts[keyChoice]++;
  } //if
} //for

Затем у вас есть объект со свойствами, равными тому, сколько раз свойство существовало в массиве.

Сначала отсортируйте массив, тогда вы можете выполнить однократное сканирование для подсчета вхождений (аналогично предложению Райана выше).

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