Подсчитайте количество раз, когда одно и то же значение появляется в массиве javascript

Я хотел бы знать, есть ли собственный JavaScript-код, который делает то же самое, что и это:

function f(array,value){
    var n = 0;
    for(i = 0; i < array.length; i++){
        if(array[i] == value){n++}
    }
    return n;
}

Ответ 1

Для этой цели могут быть разные подходы.
И ваш подход с циклом for очевидно, не является неуместным (за исключением того, что он выглядит избыточно по количеству кода).
Вот несколько дополнительных подходов к получению появления определенного значения в массиве:

  • Использование метода Array.forEach:

    var arr = [2, 3, 1, 3, 4, 5, 3, 1];
    
    function getOccurrence(array, value) {
        var count = 0;
        array.forEach((v) => (v === value && count++));
        return count;
    }
    
    console.log(getOccurrence(arr, 1));  // 2
    console.log(getOccurrence(arr, 3));  // 3
    
  • Использование метода Array.filter:

    function getOccurrence(array, value) {
        return array.filter((v) => (v === value)).length;
    }
    
    console.log(getOccurrence(arr, 1));  // 2
    console.log(getOccurrence(arr, 3));  // 3
    

Ответ 2

Вы можете использовать сокращение, чтобы добраться туда:

Рабочий пример

var a = [1,2,3,1,2,3,4];

var map = a.reduce(function(obj, b) {
  obj[b] = ++obj[b] || 1;
  return obj;
}, {});

Ответ 3

Вы можете использовать indexOf() для поиска и подсчета каждого value в array

function g(array,value){
  var n = -1;
  var i = -1;
  do {
    n++;
    i = array.indexOf(value, i+1);
  } while (i >= 0  );

  return n;
}

Ответ 4

Вы также можете использовать forEach

let countObj = {};
let arr = [1,2,3,1,2,3,4];

let countFunc = keys => {
  countObj[keys] = ++countObj[keys] || 1;
}

arr.forEach(countFunc);

// {1: 2, 2: 2, 3: 2, 4: 1}