【问题标题】:Transforming Immutable.js List of Maps to a List of Lists and then using this as data for google charts将 Immutable.js 地图列表转换为列表列表,然后将其用作谷歌图表的数据
【发布时间】:2016-01-20 17:45:52
【问题描述】:

我正在尝试使用谷歌图表库来绘制一些时间序列数据,目前这些数据是我从应用程序粘贴到单独文件中的一些虚拟数据。

我有一个不可变的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>]

我觉得我做不可变转换的方式非常老套,因为我今天才开始使用这个库。如果有更好的方法来解决这个问题,请告诉我。

【问题讨论】:

  • 你为什么要使用不可变的?使用“不可变转换”这一短语暗示了一些误解。如果您只需要一个操作库,请使用 lodash....
  • 事情是,我想尝试一下,因为我正在考虑将它集成到 redux 中。但是如果我不尽快解决这个问题,我可能会采用 lodash。
  • 尝试简单地导出 row_data 并将“toJS()”函数移动到第二个 sn-p 中的导入。

标签: javascript reactjs google-visualization immutable.js


【解决方案1】:

事实证明,这是将 unix 时间戳转换为 Javascript Date 对象的正确模式。

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

这是因为setTime 函数使用毫秒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-16
    • 2020-11-17
    • 2021-05-19
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多