2016-03-28 2 views
0

Je possède ce code (je vais le transmettre comme données JSON pour highchart JS)Convertir groupée temps strftime en nombre entier

<%= 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 %> 

qui retourne:

[{"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]]}] 

Cependant, je besoin de ce :

["1457049600",1] 

être un nombre entier et multiplié à 1000 comme suit:

[1457049600000,1] 

J'ai essayé de faire des exemples de données pour vous assurer qu'il est correct et cela fonctionne:

@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 

Est-il possible ou est-il un moyen de

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

à l'entier de sortie au lieu de chaîne et aussi le multiplier par 1000? J'utilise la gem date de groupe pour regrouper mes données par dates. Aussi, je n'utilise pas les gemmes de Highchart pour ce projet, j'essaie différentes approches pour insérer des données dans les graphiques.

Répondre

2
>> 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]]}] 

Cela fonctionne comme suit:

#  ,-- 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]})} 
+0

Votre un épargnant de vie! Merci! J'ai essayé et ça marche !! :) –