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