Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Как посчитать, сколько раз встречаются значения в массиве

Короткий ответ

Пройдите массив и увеличивайте счётчик в объекте для каждого значения:

const fruits = ['apple', 'pear', 'apple', 'plum', 'apple', 'pear'];
const counts = {};
 
for (const fruit of fruits) {
  counts[fruit] = (counts[fruit] ?? 0) + 1;
}
 
console.log(counts);

Результат:

{
  "apple": 3,
  "pear": 2,
  "plum": 1
}

Одно значение

Если нужно количество только одного значения, отфильтруйте массив:

const fruits = ['apple', 'pear', 'apple', 'plum'];
 
console.log(fruits.filter((fruit) => fruit === 'apple').length);

Результат:

2

Через Map

Map сохраняет порядок первого появления и принимает любые ключи, включая числа и объекты:

const rolls = [3, 6, 3, 1, 6, 3];
const counts = new Map();
 
for (const roll of rolls) {
  counts.set(roll, (counts.get(roll) ?? 0) + 1);
}
 
console.log([...counts].map(([value, count]) => `${value}: ${count}`).join(', '));

Результат:

3: 3, 6: 2, 1: 1

Частая ошибка

Без начального значения counts[fruit] + 1 превращается в undefined + 1, то есть NaN:

const counts = {};
counts.apple = counts.apple + 1;
 
console.log(counts.apple);

Результат:

NaN

Функции из этого ответа

  • Array.prototype.reduce — Сводит массив к одному значению.
  • Array.prototype.filter — Создаёт новый массив из элементов, прошедших проверку.
  • Object.groupBy — Группирует элементы массива по ключу.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.