javascript - lodash:根据日期聚合和减少对象数组

标签 javascript arrays functional-programming lodash

我是 Lodash 和函数式编程概念的新手。所以,我有一组对象,这些对象具有如下所示的日期:

[
    {
         "date": '1-Jan-2015',
         "count": 4 
    },
    {
         "date": '4-Jan-2015',
         "count": 3 
    },
    {
         "date": '1-Feb-2015',
         "count": 4 
    },
    {
         "date": '18-Feb-2015',
         "count": 10 
    }
]

我想以这样一种方式减少和聚合它,即我得到一个对象数组,其中每个对象都有月度数据而不是像这样的日数据:

[
    {
        "date": 'Jan, 2015',
        "count": 7 // aggregating the count of January
    },
    {
        "date": 'Feb, 2015',
        "count": 14 //aggregating the count of February
    }
]

目前,我编写了一段非常难读且令人费解的代码,其中充满了有效的 ifs 和 fors。但是,我想使用 lodash 重构它。可以使用 lodash 吗?我环顾四周,发现 _.reduce_.groupBy 我可能会使用它们,但我现在很困惑,无法找到一个好的干净实现。

最佳答案

我们可以使用_.reduce & _.values

var arr = [
    {
         "date": '1-Jan-2015',
         "count": 4 
    },
    {
         "date": '4-Jan-2015',
         "count": 3 
    },
    {
         "date": '1-Feb-2015',
         "count": 4 
    },
    {
         "date": '18-Feb-2015',
         "count": 10 
    }
]

_.values(_.reduce(arr,function(result,obj){
  var name = obj.date.split('-');
  name = name[1]+', '+name[2];  
  result[name] = {
    date:name,
    count:obj.count + (result[name]?result[name].count:0)
  };
  return result;
},{}));

关于javascript - lodash:根据日期聚合和减少对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36454604/

相关文章:

javascript - JavaScript 'bind' 方法有什么用?

javascript - 如何使用react-router渲染嵌套组件

c++ - 使用引用数组循环遍历类成员 (C++)

ios - 移动索引路径后 UITableviewCell 内的 UICollectionView

java - 如何使用 "stop"作为关键字来停止 for 循环?

java - 功能范式中的动态编程

javascript - 对齐两个表的表行

javascript - 对调用函数的每个变量进行空检查?

algorithm - 弱交替自动机上的空性

php - 无法从 php 类调用全局函数