Как посчитать колличество каждой из цифр в массиве JavaScript

У меня есть массив:

[5, 2, 8, 1, 7, 3, 1, 5, 10, 5, 11, 7, 1]

Как в нем посчитать количество каждой из цифр?

Например тут три пятерки и только одна десятка.

Если делать циклами то их получиться очень много.

Может не очень понятно, я хочу получить:

5 - 3   
2 - 1
8 - 1
и т.д.

Ответы (2 шт):

Автор решения: Vasily

Это достаточно просто сделать при помощи структуры данных Map:

Создаем карту и запускаем цикл for...of по массиву из цифр, на каждой итерации вызываем метод set() по нашей карте. Он задает значение для ключа, которым является текущий перебираемый элемент.

Что бы вычислить новое значение мы спрашивает есть ли уже такой ключ в нашей карте и если да то берем существующее значение и прибавляем к нему единицу, а если нет то определяем как один.

const countNumbers = numbers => {
    const map = new Map()

    for (const number of numbers) {
        map.set(number, map.has(number) ? map.get(number) + 1 : 1)
    }
    return map
}

const result = countNumbers([5, 2, 8, 1, 7, 3, 1, 5, 10, 5, 11, 7, 1])

console.log(result)

// Map {
//   5 => 3,
//   2 => 1,
//   8 => 1,
//   1 => 3,
//   7 => 2,
//   3 => 1,
//   10 => 1,
//   11 => 1
// }
→ Ссылка
Автор решения: Алексей Власов

Вроде не сильно много циклов:

numbers = [5, 2, 8, 1, 7, 3, 1, 5, 10, 5, 11, 7, 1];
numbers_select = [5,2,8]
output = {}
for(int l = 0; l < numbers.select.length; l++) output[l] = 0;

for(int i = 0; i < numbers.length; i++)
{
    for(int j = 0; j < numbers_select.length; j++)
    {
        if(numbers[i] == numbers_select[j])
        {
            output[numbers_select[j]]++;
        }
    }
}

console.log(output);
→ Ссылка