2016-01-20 83 views
2

我正在嘗試使用谷歌圖表庫來繪製一些時間序列數據,這些數據目前是一些我粘貼到的虛擬數據從我的應用程序單獨的文件。將Immutable.js地圖列表轉換爲列表列表,然後將其用作谷歌圖表的數據

我有一個不可變List看起來像這樣:

let data = [{"Date":1452457976,"Value":246.712065},{"Date":1452457990,"Value":268.240542}] 

我試圖將此轉換爲普通的JavaScript數組的數組,每個包含一個Date對象和一個值,如下所示。

let row_data = data.map((list_object) => { 
    let temp_list = Immutable.List(); 
    temp_list = temp_list.push(new Date(list_object.get('Date'))); 
    temp_list = temp_list.push(list_object.get('Value'); 
    return temp_list; 
}); 

export default row_data.toJS(); 

我使用此導出的值作爲輸入用於構建數據表使用react-google-charts庫一個谷歌的圖表。結果是頁面部分有空的內容,沒有任何呈現沒有和沒有記錄錯誤。

import row_data from 'data'; 

let options = {...}; 

let rows = row_data; 

let columns = [ 
    { 
     'type': 'date', 
     'name': 'Date' 
    }, 
    { 
     'type': 'number', 
     'name': 'Latency' 
    } 
] 

this.setState({ 
    'rows': rows, 
    'columns': columns, 
    'options': options 
}); 

挖入堆棧跟蹤,它看起來像爲行傳遞的參數不是數組類型,即使登錄的變量給我以下內容:Array[<length>]

我覺得我正在做這種不可改變的轉換方式,因爲我今天剛剛開始使用這個庫,這很不方便。請讓我知道是否有更好的方法來解決這個問題。

+0

爲什麼你使用immutable?使用「不可改變的轉變」這個短語暗示了一些誤解。如果你只是需要一個操作庫,使用lodash .... – dandavis

+0

事情是,我想嘗試一下,因爲我正在整合到redux中。但如果我不盡快解決問題,lodash就是我可能要走的路。 – Bhargav

+0

嘗試僅導出row_data並將「toJS()」函數移至第二個片段中的導入。 –

回答

2

原來,這是將unix時間戳轉換爲Javascript對象的正確模式。

let time_labels = data.map((ts_obj) => { 
    let d = new Date(); 
    d.setTime(ts_obj.get('Date') * 1000); 
    return d; 
}); 

這是因爲setTime函數使用毫秒。