'Count the number of times a same value appears in a javascript array

I would like to know if there is a native javascript code that does the same thing as this:

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


Solution 1:[1]

There might be different approaches for such purpose.
And your approach with for loop is obviously not misplaced(except that it looks redundantly by amount of code).
Here is some additional approaches to get the occurrence of a certain value in array:

  • Using Array.forEach method:

    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
    
  • Using Array.filter method:

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

Solution 2:[2]

Another option is:

count = myArray.filter(x => x == searchValue).length;

Solution 3:[3]

You could use reduce to get there:

Working example

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

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

Solution 4:[4]

Here is my solution without using an additional object and using reduce:

const occurrencesOf = (number,numbers) => numbers.reduce((counter, currentNumber)=> (number === currentNumber ? counter+1 : counter),0);
occurrencesOf(1, [1,2,3,4,5,1,1]) // returns 3
occurrencesOf(6, [1,2,3,4,5,1,1]) // returns 0
occurrencesOf(5, [1,2,3,4,5,1,1]) // returns 1

Solution 5:[5]

You can also use 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}

Solution 6:[6]

let ar = [2,2,3,1,4,9,5,2,1,3,4,4,8,5];

const countSameNumber = (ar: any, findNumber: any) => {
    let count = 0;
    ar.map((value: any) => {
        if(value === findNumber) {
            count = count + 1;
        }
    })
    return count;
}


let set = new Set(ar);
for (let entry of set) {
    console.log(entry+":", countSameNumber(ar, entry));
}

Solution 7:[7]

const arr = ["a", "a", "a", "b", "b", "b", "b", "c", "c", "c"];
let count = 0;

function countValues(array, countItem) {
  array.forEach(itm => {
    if (itm == countItem) count++;
  });
  console.log(`${countItem} ${count}`);
}
countValues(arr, "c");

Solution 8:[8]

You may want to use indexOf() function to find and count each value in array

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

  return n;
}

Solution 9:[9]

let countValue = 0;

Array.forEach((word) => {
  if (word === searchValue) {
    return countValue ++;
  }
});
console.log(`The number of word 'asdf': ${countValue}`);

I used this code to count the number of a given word in a text which was previously converted into an array.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 RomanPerekhrest
Solution 2 Vencovsky
Solution 3 omarjmh
Solution 4
Solution 5 JJ Cha
Solution 6 Jaint Rai
Solution 7
Solution 8 Saeed D.
Solution 9 Donald Duck