2013-07-12 50 views
0

我有一个javascript对象,我通过json从数据库中获取。有没有简单的方法来计算基于同一个月的价值? (颜色不重要)。所以结果会是这样的:计数javascript对象的属性值

data = [ 
{ 
    "value": 30, 
    "month": 8, 
    "color": "#49e630" 
}, 
{ 
    "value": 50, 
    "month": 7, 
    "color": "#5001dc" 
}, 
{ 
    "value": 100, 
    "month": 7, 
    "color": "#6365c3" 
} 
] 

result = [ 
{ 
    "value": 30, 
    "month": 8, 
    "color": "#49e630" 
}, 
{ 
    "value": 150, 
    "month": 7, 
    "color": "#6365c3" 
} 
] 

回答

0

如何创建一个基于地图的上月值,就像这样:

//populate a map with keys based on the month 
var monthMap = new Object(); 
for (var i = 0; i < data.length; i++) { 
    if (monthMap[data[i]['month']] == null) { 
     monthMap[data[i]['month']] = data[i]; 
    } else { 
     monthMap[data[i]['month']]['value'] += data[i]['value']; 
    } 
} 

//convert monthMap to list 
var result = []; 
for (var key in monthMap) { 
    if (monthMap.hasOwnProperty(key)) { 
     result.push(monthMap[key]); 
    } 
} 

编辑:你也可以写这样的数据循环,可能会稍微更清晰:

//populate a map with keys based on the month 
var monthMap = new Object(); 
data.forEach(function(listitem) { 

    var month = listitem['month']; 

    if (monthMap[month] == null) { 
     monthMap[month] = listitem; 
    } else { 
     monthMap[month]['value'] += listitem['value']; 
    } 
}); 

//convert to list... 
+0

谢谢,它工作完美! – Lukaydo

+0

很高兴帮助!如果您有机会将此答案标记为已接受,我将不胜感激。谢谢! – user1171848