Angular:组合数组对象并组合值

时间:2015-08-24 13:00:58

标签: arrays angularjs merge

我正在使用http.get检索数据。 这为我提供了一系列对象,如下所示:

[{
    "id”:12345,
    "resource_state":2,
    "external_id”:”abscdgrft”,
    "upload_id”:1234567,
    "athlete":{
        "id”:123456,
        "resource_state":2,
        "firstname”:”testname”,
        "lastname”:”testlastname”,
        "profile_medium”:”image/athlete/medium.png",
        "profile":"image/athlete/large.png",
        "city”:”testcity”,
        "state”:”teststate”,
        …
    },
    "name”:”test name“,
    "distance":87223.1,
    "moving_time":11026,
    "elapsed_time":11173,
    "total_elevation_gain":682.3,
    …
}]

我想根据athlete.firstname + athlete.lastname。

组合所有这些对象

例如,所有具有运动员名字Jim和姓氏Donalds的对象我希望组合在一个对象中,所有其他名称也是如此。

当根据全名组合对象时,需要将“distance”,“moving_time”,“elapsed_time”和“total_elevation_gain”等值相加。

我尝试使用下面的代码,但问题是我无法使用上面提到的多个值。

这仅适用于一个值,例如距离:

var obj = {}; // Initialize the object

angular.forEach(data, function(value, key) {
    if (value.start_date > firstdayOfWeek && value.start_date < lastdayOfWeek) {
        if (obj[value.athlete.firstname + ' ' + value.athlete.lastname]) { // If already exists
            obj[value.athlete.firstname + ' ' + value.athlete.lastname] += value.distance; // Add value to previous value
        } else {
            obj[value.athlete.firstname + ' ' + value.athlete.lastname] = value.distance; // Add in object
        }
    } else {
        //do nothing
    }
});
console.log(obj); // Result

当我像这样修改它时它不再起作用了。

var obj = {};

            angular.forEach(data, function(value, key) {

                //console.log(value);

                if (value.start_date > startOfLastWeek && value.start_date < endOfLastWeek) {

                    //console.log(value);

                    if (obj[value.athlete.firstname + ' ' + value.athlete.lastname]) { // If already exists
                        obj[value.athlete.firstname + ' ' + value.athlete.lastname] += { 
                            "profile" : value.athlete.profile,
                            "distance" : value.distance,
                            "moving_time" : value.moving_time,
                            "elapsed_time" : value.elapsed_time,
                            "total_elevation_gain" : value.total_elevation_gain,
                        }; // Add value to previous value
                    } else {
                        obj[value.athlete.firstname + ' ' + value.athlete.lastname] = { 
                            "profile" : value.athlete.profile,
                            "distance" : value.distance,
                            "moving_time" : value.moving_time,
                            "elapsed_time" : value.elapsed_time,
                            "total_elevation_gain" : value.total_elevation_gain, 
                        }; // Add in object             
                    }
                } else {
                    //do nothing
                }
            });

            console.log(obj); // Result

谢谢!

0 个答案:

没有答案