【问题标题】:countBy Method into a Function using Javascript使用 Javascript 将 countBy 方法转换为函数
【发布时间】:2015-02-20 01:37:19
【问题描述】:

我正在尝试编写一个与 Javascript 中的 countBy 方法相同的 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);}));

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

【问题讨论】:

    标签: javascript function methods


    【解决方案1】:
    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;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-29
      • 2016-06-02
      • 1970-01-01
      • 2022-01-04
      • 2016-11-26
      • 2015-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多