[英]angular filter with group by date
我正在跟踪人们在我的应用中单击社交按钮的次数。 我只想给他们每天点击一次的功劳。 我目前按社交平台过滤点击次数,但是我无法弄清楚如何按天分组,而每天只给他们1次计数。 下面是我当前的代码:
控制器:
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);
听起来您想将点击次数reduce
到每天点击次数。
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。
PS:如果需要在多个控制器的模板中使用这种类型的缩小,则没有什么可以阻止您定义自己的角度滤波器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.