2016-01-20 86 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函数使用毫秒。