使用 Javascript 将 countBy 方法转换为函数

countBy Method into a Function using Javascript

我正在尝试编写一个 countBy 函数,与 Javascript 中的 countBy 方法相同。这是我目前所拥有的:

var array = [1,2,4,4,5];

function countBy(collection, func) {
    var object = {} ;
    for (var i=0;i<=0; i++) {
      for (var key in object) {
            if (func(collection[i]) === object.key) {
          object.key ++;
        } else {
          object.key = 1;
        }

      }

      }
  return object
}

alert(countBy(array, function(n) {return Math.floor(n);}));

代码打算做的是搜索集合数组以查看那里的值是否与对象中的键匹配。如果它在集合数组中找到匹配项,则将该键值递增 1。如果没有找到,则创建一个新的键值。因此,应该提醒的结果是:{4:2, 1:1, 2:1, 5:1}。但我的输出似乎是 [object Object]。我做错了什么??

for (var i=0;i<=0; i++) {

这将 运行 恰好一次,而不是遍历集合。

for (var key in object) {
    if (func(collection[i]) === object.key) {

这样做是错误的;您应该在每次迭代中只调用一次 func,然后在您的对象中查找函数调用的结果。

object.key ++;

这不是你想要的;最好改用数组取消引用运算符。

function countBy(collection, func) 
{
  var object = Object.create(null);

  collection.forEach(function(item) {
    var key = func(item);
    if (key in object) {
      ++object[key];
    } else {
      object[key] = 1;
    }
  });

  return object;
}