javascript - 按日期分组的 Angular 过滤器

标签 javascript angularjs underscore.js

我正在跟踪人们点击我的应用程序中的社交按钮的次数。我只想给他们每天一次点击的功劳。我目前按社交平台过滤点击,但我不知道如何按天分组,只能给它们每天 1 次的计数。下面是我当前的代码:

Controller :

Data.get('stats/'+$scope.uid).then(function(data){
    $scope.stats = data.data;

    // determine if the user has any stats
    $scope.hasStats = $scope.stats.length;

    $scope.topUsersObjects = $filter('filter')($scope.stats, { 
        action: "completed" 
    });
    $scope.facebookObjects = $filter('filter')($scope.stats, { 
        platform: "facebook", 
        action: "completed" 
    });
    $scope.twitterObjects = $filter('filter')($scope.stats, { 
        platform: "twitter", 
        action: "completed" 
    });
    $scope.facebookClickedObjects = $filter('filter')($scope.stats, { 
        platform: "facebook", 
        action: "clicked" 
    });
    $scope.twitterClickedObjects = $filter('filter')($scope.stats, { 
        platform: "twitter", 
        action: "clicked" 
    });

    $scope.labels = ["Facebook", "Twitter", "Clicked"];

    var totalClicked = $scope.facebookClickedObjects.length + $scope.twitterClickedObjects.length;
    $scope.data = [$scope.facebookObjects.length, $scope.twitterClickedObjects.length, totalClicked];
});

更新(示例$scope.stats):

Object

action:"clicked ls"
guid:"1200041"
id:"52"
platform:"facebook"
timeclicked:"2015-10-12 21:46:26"
uid:"44043077e53d"

非常感谢任何帮助。

最终更新答案:

谢谢@William-b,你的回答有效,但是我最终这样做了。如果这不是一个好方法,请告诉我。感谢大家的帮助。

// facebook group by days, completed
$scope.facebookGroupByDay = _.groupBy($scope.facebookObjects, function(item) {
    return item.timeclicked.substring(0,10);
});

// get the number of days with a completed post
$scope.fbCount = Object.keys($scope.facebookGroupByDay);

 // twitter group by days, clicked 
 $scope.twitterGroupByDay = _.groupBy($scope.twitterClickedObjects, function(item) {
     return item.timeclicked.substring(0,10);
 });

 // get the number of days with a clicked tweet
 $scope.twCount = Object.keys($scope.twitterGroupByDay);

最佳答案

听起来您想将点击数组减少为每日点击次数。

var days = {}; // let's keep track of days clicked here during the reduction

var clicksByDay = $scope.stats.reduce(function (clickCount, stat) {
  var day = stat.timeclicked.split(' ')[0];
  if (!days[day]) {
    // we didnt count this day yet
    clickCount++;
    days[day] = true; // mark this day as counted
  }
  return clickCount;
}, 0);

如果 $scope.stats 看起来像这样:

[ 
  { timeclicked: '2015-10-12 12:34:56' },  
  { timeclicked: '2015-10-12 21:46:26'},  
  { timeclicked: '2015-10-13 21:46:26' }  
]

那么在这种情况下clicksByDay将为2。

附注如果在多个 Controller 的模板中需要的话,没有什么可以阻止您为这种类型的减少定义自己的 Angular 过滤器。

关于javascript - 按日期分组的 Angular 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37705759/

相关文章:

javascript - 多个父子作用域事件触发问题

javascript - 下划线包含从头开始?

javascript - 主干滚动事件未触发

javascript - 无法在android中登录webview

javascript - 在 JS 中组合数组

javascript - 无法在 Angular 中插入 url 参数

javascript - JWT token 未在 $resource 中的 header 上设置

javascript - 在哪里编码以覆盖 backbone.sync

javascript - 将事件监听器添加到文档,而不是检查元素是否存在,然后添加事件监听器

javascript - 有什么方法可以将整个网页从不同域加载到我的页面吗?