2016-06-08 140 views
0

我正在跟蹤用戶在我的應用中點擊了多少次社交按鈕。我想只給他們每天點擊一次的功勞。我目前通過社交平臺過濾點擊量,但我無法弄清楚如何按天分組,並且只給他們每天計數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]; 
}); 

UPDATE(樣本$ scope.stats):

Object 

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

任何幫助是極大的讚賞。

最終更新的答案:然而

謝謝@威廉-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); 
+0

什麼是$ scope.stats的json模式?我沒有看到你的例子中的任何地方的日期 –

+0

@DanielGimenez請參閱更新的示例$ scope.stats – Jason

回答

1

這聽起來像你想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在這種情況下。

P.S.如果需要在多個控制器的模板中使用這種類型的縮減,則沒有什麼能夠阻止您定義自己的角度濾波器。

+0

我該怎麼做? – Jason

+0

很容易! https://docs.angularjs.org/tutorial/step_11 –

+0

請在最終更新答案下查看我的編輯。謝謝 – Jason