JavaScript Array: подсчет вхождений элементов

Вот несколько методов JavaScript для подсчета вхождений элементов в массив:

  1. Использование цикла for и объекта для хранения счетчиков:

    function countOccurrences(arr) {
    var counts = {};
    for (var i = 0; i < arr.length; i++) {
    var item = arr[i];
    counts[item] = counts[item] ? counts[item] + 1 : 1;
    }
    return counts;
    }
  2. Использование метода уменьшения():

    function countOccurrences(arr) {
    return arr.reduce(function(counts, item) {
    counts[item] = counts[item] ? counts[item] + 1 : 1;
    return counts;
    }, {});
    }
  3. Использование объекта Map:

    function countOccurrences(arr) {
    var counts = new Map();
    arr.forEach(function(item) {
    counts.set(item, (counts.get(item) || 0) + 1);
    });
    return counts;
    }
  4. Использование метода array.reduce() со стрелочной функцией ES6:

    const countOccurrences = arr =>
    arr.reduce((counts, item) => {
    counts[item] = counts[item] ? counts[item] + 1 : 1;
    return counts;
    }, {});