Поиск наиболее часто встречающегося элемента в массиве с помощью JavaScript

Для новичков, включая меня, поиск наиболее часто встречающегося элемента или «моды» массива может сначала показаться сложным, но он становится проще, когда вы понимаете мыслительный процесс, стоящий за этим. В этом уроке я объясню, как я подошел к конкретной проблеме, с которой столкнулся, а именно к созданию функции, которая возвращает год с наибольшим количеством открытий астероидов из заданного объекта данных.

Вот мое решение:

function getGreatestDiscoveryYear(data) {
  let obj = {};
  const asteroid = data.asteroids.map(years => years.discoveryYear);
  for (let year of asteroid) {
    if (!obj[year]) {
      obj[year] = 1;
    } else {
      obj[year] += 1;
    }
  };
  let modeYear = 0;
  let yearWithMostDiscoveries = null;
  for (let year in obj) {
    if (obj[year] > modeYear) {
      modeYear = obj[year];
      yearWithMostDiscoveries = year;
    }
  }
  return parseInt(yearWithMostDiscoveries);
}

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

Шаг 1) Я запустил функцию, объявив пустой объект с именем «obj». Этот объект будет использоваться для отслеживания количества открытий в год, где годы будут использоваться в качестве ключей, а количество открытий — в качестве значений.

Шаг 2) Затем я объявил константную переменную с именем «астероид» и использовал метод «.map()» для извлечения и сохранения всех лет открытия каждого объекта астероида во входных данных. На этом этапе выделяются соответствующие данные для анализа, в данном случае это год открытия каждого астероида.

Шаг 3) Следующим шагом было повторение каждого года массива «астероидов» с использованием цикла «for…of» и сохранение количества открытий за год в объекте «obj» с помощью оператора «if…else». Это работает с использованием лет открытия в качестве ключей в объекте «obj» и увеличивает соответствующее значение для каждого вхождения года обнаружения. Объект «obj» теперь действует как счетчик, отслеживая количество открытий астероидов за каждый год во входных данных.

Шаг 4) Теперь для второй части функции, которая должна найти или извлечь год с наибольшим количеством открытий, я объявил две переменные; «modeYear» и «yearWithMostDiscoveries», чтобы отслеживать год с наибольшим количеством открытий. Затем я использовал цикл «for…in», чтобы перебрать объект «obj» и сравнить количество открытий в каждом году с текущим значением «modeYear». Используя оператор «if()», если год в объекте «obj» имеет больше открытий, чем текущий «modeYear», тогда он обновляет «modeYear» и устанавливает «yearWithMostDiscoveries» равным текущему году.

Шаг 5) Наконец, я заставил функцию возвращать «yearWithMostDiscoveries». Я использовал метод «parseInt()», чтобы убедиться, что он возвращается как целое число. В этом может не быть необходимости, в зависимости от контекста упражнения.

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