我有以下数据,我想通过它们的月份求和所有data
值。
[
{"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":"Apr", "data": 10},
{"month":"May", "data": 14},
{"month":"June", "data": 1},
]
答案 0 :(得分:2)
似乎您不需要这种冗长的数据格式。您只需进行1次迭代即可完成
:data.each_with_object(Hash.new { |h, v| h[v] = 0 }) do |elem, memo|
memo[elem[:month]] += elem[:data]
end
#=> {"Apr"=>10, "May"=>14, "June"=>1}
答案 1 :(得分:1)
您可以在month
和group_by
值的帮助下,按sum
将数据分组
data = [
{"month":"Apr", "data": 1},
{"month":"Apr", "data": 9},
{"month":"May", "data": 2},
{"month":"May", "data": 10},
{"month":"May", "data": 2},
{"month":"June", "data": 1}
]
data.group_by{ |h| h[:month] }.map{ |k, v| { month: k, data: v.sum{ |h| h[:data] }}}
#=> [{:month=>"Apr", :data=>10},
#=> {:month=>"May", :data=>14},
#=> {:month=>"June", :data=>1}]
答案 2 :(得分:0)
虽然我自己尝试过。我能够以某种方式做到这一点。我不确定这是否是最好的方法,但是它确实有效。在这里,我还添加了空的月份,例如,上面的示例中有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},
]