Преобразование сгруппированного времени strftime в целое число

У меня есть этот код (я передам его как данные JSON для highchart JS)

<%= ItemSale.pluck(:item_id).uniq.map{|item_id| {
name: Item.find(item_id).name, 
data: @item_sales.where(item_id: item_id).group_by_day(:date_sold,
format: "%s").count.to_a}}.to_json %>

Это возвращает:

[{"name":"Computer","data":[["1456790400",2],["1456876800",0],["1456963200",1]]},{"name":"Android Phones","data":[["1456876800",3],["1456963200",0],["1457049600",1],["1457136000",0],["1457222400",0],["1457308800",2]]}]

Однако мне нужно это:

["1457049600",1]

быть целым числом и умножить на 1000 следующим образом:

[1457049600000,1]

Я попытался сделать образцы данных, чтобы убедиться, что они верны и работают:

@item_sales_series = [{"name":"Computer","data":[[1456790400000,2],[1456876800000,0],[1456963200000,1]]},{"name":"Android Phones","data":[[1456876800000,3],[1456963200000,0],[1457049600000,1],[1457136000000,0],[1457222400000,0],[1457308800000,2]]}].to_json

Возможно ли или есть способ

group_by_day(:date_sold, format: "%s").count.to_a

вывести целое число вместо строки, а также умножить его на 1000?

Я использую гем групповой даты для группировки данных по датам. Также я не использую драгоценные камни Highchart для этого проекта, я пробую другой подход к вставке данных в диаграммы.


person Christian Angel Galamay    schedule 28.03.2016    source источник


Ответы (1)


>> array = [{"name":"Computer","data":[["1456790400",2],["1456876800",0],["1456963200",1]]},{"name":"Android Phones","data":[["1456876800",3],["1456963200",0],["1457049600",1],["1457136000",0],["1457222400",0],["1457308800",2]]}]

>> array.map{|hash| hash.merge(data: hash[:data].map{|str, int| [str.to_i*1000, int]})}
=> [{:name=>"Computer", :data=>[[1456790400000, 2], [1456876800000, 0], [1456963200000, 1]]}, {:name=>"Android Phones", :data=>[[1456876800000, 3], [1456963200000, 0], [1457049600000, 1], [1457136000000, 0], [1457222400000, 0], [1457308800000, 2]]}]

Это работает следующим образом:

#        ,-- Loop over every element of the top-level array and change it's value
#        |                 ,-- For each hash, change only the element called "data"
#        |                 |                      ,-- In the "data" array, change every element
#        |                 |                      |                   ,-- Change the string to an integer and multiply by 1000
#        |                 |                      |                   |
#        v                 v                      v                   v
>> array.map{|hash| hash.merge(data: hash[:data].map{|str, int| [str.to_i*1000, int]})}
person user12341234    schedule 28.03.2016
comment
Ваш спасатель жизни! Спасибо! Я попробовал, и это работает! :) - person Christian Angel Galamay; 28.03.2016