Counting the occurrences / frequency of array elements

前端 未结 30 2055
甜味超标
甜味超标 2020-11-21 06:47

In Javascript, I\'m trying to take an initial array of number values and count the elements inside it. Ideally, the result would be two new arrays, the first specifying each

相关标签:
30条回答
  • 2020-11-21 07:14

    I think this is the simplest way how to count occurrences with same value in array.

    var a = [true, false, false, false];
    a.filter(function(value){
        return value === false;
    }).length
    
    0 讨论(0)
  • 2020-11-21 07:15

    One line ES6 solution. So many answers using object as a map but I can't see anyone using an actual Map

    const map = arr.reduce((acc, e) => acc.set(e, (acc.get(e) || 0) + 1), new Map());
    

    Use map.keys() to get unique elements

    Use map.values() to get the occurrences

    Use map.entries() to get the pairs [element, frequency]

    var arr = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4]
    
    const map = arr.reduce((acc, e) => acc.set(e, (acc.get(e) || 0) + 1), new Map());
    
    console.info([...map.keys()])
    console.info([...map.values()])
    console.info([...map.entries()])

    0 讨论(0)
  • 2020-11-21 07:16

    Here you go:

    Live demo: http://jsfiddle.net/simevidas/bnACW/

    Note

    This changes the order of the original input array using Array.sort

    var arr = [2, 2, 2, 2, 2, 4, 5, 5, 5, 9];
    
    function foo(arr) {
      var a = [],
        b = [],
        prev;
    
      arr.sort();
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] !== prev) {
          a.push(arr[i]);
          b.push(1);
        } else {
          b[b.length - 1]++;
        }
        prev = arr[i];
      }
    
      return [a, b];
    }
    
    var result = foo(arr);
    console.log('[' + result[0] + ']','[' + result[1] + ']')

    0 讨论(0)
  • 2020-11-21 07:16
    var a = [5, 5, 5, 2, 2, 2, 2, 2, 9, 4].reduce(function (acc, curr) {
      if (typeof acc[curr] == 'undefined') {
        acc[curr] = 1;
      } else {
        acc[curr] += 1;
      }
    
      return acc;
    }, {});
    
    // a == {2: 5, 4: 1, 5: 3, 9: 1}
    
    0 讨论(0)
  • 2020-11-21 07:17
    function countOcurrences(arr){
        return arr.reduce((aggregator, value, index, array) => {
          if(!aggregator[value]){
            return aggregator = {...aggregator, [value]: 1};  
          }else{
            return aggregator = {...aggregator, [value]:++aggregator[value]};
          }
        }, {})
    }
    
    0 讨论(0)
  • 2020-11-21 07:18

    ES6 solution with reduce (fixed):

    const arr = [2, 2, 2, 3, 2]
    
    const count = arr.reduce((pre, cur) => (cur === 2) ? ++pre : pre, 0)
    console.log(count) // 4

    0 讨论(0)
提交回复
热议问题