当我自己尝试时。我能够以某种方式做到这一点。我不确定这是否是最好的方法,但它确实有效。在这里,我还添加了空月份,例如我上面的示例有 4 月、5 月、6 月,我还需要剩下的月份,所以这是我的代码。
这里arr 是上面示例中提到的数据库中的实际数组,month_list 包含从Jan 到Dec 的月份列表
arr 包含这样的值
[
{"Month":"Apr", "data": 1},
{"month":"Apr", "data": 9},
{"month":"May", "data": 2},
{"month":"May", "data": 10},
{"month":"May", "data": 2},
{"month":"June", "data": 1},
]
month_list 包含这样的空值
[
{"month":"Jan", "data": 0},
{"month":"Feb", "data": 0},
{"month":"Mar", "data": 0},
{"month":"Apr", "data": 0},
{"month":"May", "data": 0},
{"month":"Jun", "data": 0},
{"month":"Jul", "data": 0},
{"month":"Aug", "data": 0},
{"month":"Sep", "data": 0},
{"month":"Oct", "data": 0},
{"month":"Nov", "data": 0},
{"month":"Dec", "data": 0},
]
以下函数将合并两个数组并每月汇总所有数据
def self.add_values_via_date(arr, month_list)
a = []
# create empty data
month_list.each do |data|
a << {:month=> data, :data=>0}
end
#sum all months data
a.each do |data|
arr.each do |value|
if data[:month] == value[:month]
data[:data] += value[:data]
end
end
end
return a
end
然后给我这样的输出
[
{"month":"Jan", "data": 0},
{"month":"Feb", "data": 0},
{"month":"Mar", "data": 0},
{"month":"Apr", "data": 10},
{"month":"May", "data": 14},
{"month":"Jun", "data": 1},
{"month":"Jul", "data": 0},
{"month":"Aug", "data": 0},
{"month":"Sep", "data": 0},
{"month":"Oct", "data": 0},
{"month":"Nov", "data": 0},
{"month":"Dec", "data": 0},
]