2016-03-28 26 views
0

ben döndürendönüştürme gruplandırılmış strftime süresi

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

bu kodu (Ben highchart JS için JSON veri olarak geçmek için gidiyorum) adres tamsayı:

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

Ancak, buna ihtiyacım var :

["1457049600",1] 

bir tamsayı ve böyle 1000 çarpılır için:

[1457049600000,1] 

ben doğru olduğundan emin olmak için örnek verileri yapıyor çalıştı ve bu çalışıyor:

@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 

mümkün mü veya çıkış tamsayı yerine kadar

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

için bir yol var dize ve ayrıca 1000 ile çarpmak?

Verilerimi tarihe göre gruplandırmak için grup tarihini kullanıyorum. Ayrıca bu proje için Highchart taşlar kullanmıyorum, grafiklere veri eklemek için farklı bir yaklaşım deniyorum. aşağıdaki gibi

cevap

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

Bu çalışır:

#  ,-- 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

Sizin bir hayat kurtarıcı! Teşekkürler! Denedim ve çalışıyor! :) –

İlgili konular