2011-09-09 29 views
0

所以我有一些大數組需要輸出到我的視圖作爲JavaScript數組,我敢肯定這是一個非常典型的challange,但是說我有下面的ruby對象:紅寶石,渲染到頁面時快速數組處理

[ 
    {"timestamp"=>2011-09-07 20:45:00 UTC, "count"=>425.0}, 
    {"timestamp"=>2011-09-07 21:00:00 UTC, "count"=>4552.0}, 
    {"timestamp"=>2011-09-07 21:15:00 UTC, "count"=>4510.0} 
] 

,但我需要改變它,並使它我的意見,我JS像這樣:

[ 
    [Date.UTC(2011,09,07,20,45,00),425.0], 
    [Date.UTC(2011,09,07,21,00,00),4552.0], 
    [Date.UTC(2011,09,07,21,15,00),4510.0] 
]; 

什麼是做到這一點的最快方法?有沒有像我可以使用的建設者或什麼?我最擔心的就是構建html所需的時間,因爲這些數組有時非常大。

+0

你爲什麼需要改造它?看起來數據已經存在.. – noodl

+0

我想我不是指變換,但是我想如何輸出它? –

回答

2

當你面對一個轉型陣列到另一個,您可能希望只使用map,做這樣的說法:

require 'time' # Required for Time.parse, unnecessary otherwise 

input = [ 
    {"timestamp"=>Time.parse('2011-09-07 20:45:00 UTC'), "count"=>425.0}, 
    {"timestamp"=>Time.parse('2011-09-07 21:00:00 UTC'), "count"=>4552.0}, 
    {"timestamp"=>Time.parse('2011-09-07 21:15:00 UTC'), "count"=>4510.0} 
] 

result = input.map do |v| 
    "[Date.UTC(%s), %.1f]" % [ v['timestamp'].strftime('%Y,%m,%d,%H,%M,%S'), v['count'] ] 
end 

puts "[\n " + result.join(",\n ") + "\n]" 

可枚舉模塊是充滿了該品種的有用的工具方法。

+0

這真的很好!非常感謝喲!我遇到的問題是,月份比09年前進一個月,實際上由於某種原因十月份,所以最終結果是'Date.UTC(2011,08,13,23,45,00)' , 有什麼想法嗎! –

+1

假設'Date.UTC'的輸出被定義爲曆元以來的毫秒數,那麼您可能只想放入'v ['timestamp']。to_i * 1000',而不是經歷所有雜亂的轉換腳步。否則,您將不得不通過分解每個部分來構建您的呼叫:'v ['timestamp']。year'等,以獲得0-11格式的月份,而不是默認情況下的1-12格式。 – tadman

2

你沒有選擇,你必須通過你的數組來收集數據。但是,從我在這裏可以看到的,這只是收集數組中哈希值的問題。

array.map(&:values) 

我真的不明白你關心的地方......我錯過了什麼嗎?