Is there a Javascript function similar to the Python Counter function?

前端 未结 6 2205
逝去的感伤
逝去的感伤 2021-02-19 01:17

I am attempting to change a program of mine from Python to Javascript and I was wondering if there was a JS function like the Counter function from the collections module in Pyt

6条回答
  •  逝去的感伤
    2021-02-19 02:03

    For those who want a pure JavaScript solution:

    function countBy (data, keyGetter) {
      var keyResolver = {
        'function': function (d) { return keyGetter(d); },
        'string': function(d) { return d[keyGetter]; },
        'undefined': function (d) { return d; }
      };
    
      var result = {};
    
      data.forEach(function (d) {
        var keyGetterType = typeof keyGetter;
        var key = keyResolver[keyGetterType](d);
    
        if (result.hasOwnProperty(key)) {
          result[key] += 1;
        } else {
          result[key] = 1;
        }
      });
    
      return result;
    }
    

    Therefore:

    list1 = ['a', 'b', 'c', 'b', 'a', 'b', 'c', 'a', 'a', 'a'];
    console.log(countBy(list1));  // {'a':5, 'b':3, 'c':2}
    
    list2 = ['abc', 'aa', 'b3', 'abcd', 'cd'];
    console.log(countBy(list2, 'length'));  // {2: 3, 3: 1, 4: 1}
    
    list3 = [1.2, 7.8, 1.9];
    console.log(countBy(list3, Math.floor));  // {1: 2, 7: 1}
    

提交回复
热议问题