How can I group an array of objects by month?

前端 未结 3 851
渐次进展
渐次进展 2020-12-11 02:40

I\'m using JavaScript. I have an array that contains data in this format:

[
        {\"USER_NAME\":\"User1\",\"LAST_SUCCESSFUL_CONNECT\":\"1373978337642\"},
         


        
3条回答
  •  北荒
    北荒 (楼主)
    2020-12-11 03:27

    Use Map-reduce. Here is one example using underscore.js. It is very simple though it is a bit verbose.

    var data = [{
        "USER_NAME": "User1",
            "LAST_SUCCESSFUL_CONNECT": "1373978337642"
    }, {
        "USER_NAME": "User2",
            "LAST_SUCCESSFUL_CONNECT": "1374515704026"
    }, {
        "USER_NAME": "User3",
            "LAST_SUCCESSFUL_CONNECT": "1374749782479"
    }, {
        "USER_NAME": "User4",
            "LAST_SUCCESSFUL_CONNECT": "1274749702479"
    }];
    
    var monthNames = ["January", "February", "March", "April", "May", "June",
        "July", "August", "September", "October", "November", "December"];
    
    var map_result = _.map(data, function (item) {
        var d = new Date(new Number(item.LAST_SUCCESSFUL_CONNECT));
        var month = monthNames[d.getMonth()] + ", " + d.getFullYear();
        return {
            "Month": month,
            "User_Count": 1
        };
    });
    
    var result_temp = _.reduce(map_result, function (memo, item) {
        if (memo[item.Month] === undefined) {
            memo[item.Month] = item.User_Count;
        }else{
            memo[item.Month] += item.User_Count;
        }
        return memo;
    },{});
    
    //then wrap the result to the format you expected.
    var result = _.map(result_temp, function(value, key){
        return {
            "Month": key,
            "User_Count": value
        };
    });
    
    console.log(result); 
    

提交回复
热议问题