【问题标题】:Creating dictionary with map & filter?使用地图和过滤器创建字典?
【发布时间】:2017-08-15 13:23:11
【问题描述】:

为了获取我的 csv 文件数据,我有以下映射和过滤函数,以它们的列名作为键

d3.csv("Sales Export Friendly 3-19-17.csv", function(data) {
    sales = data
        .map(sale => [
        sale["Unit Booked"],
        new Date(sale["Booking Date"]).getMonth() + 1,
        new Date(sale["Checkin"]).getMonth() + 1,
        (new Date(sale["Checkout"]).valueOf() - new Date(sale["Checkin"]).valueOf())/(24*60*60*1000),
        +sale["Total Stay"],
        (+sale["Total Stay"]) / ((new Date(sale["Checkout"]).valueOf() - new Date(sale["Checkin"]).valueOf())/(24*60*60*1000)),
        ])
        .filter(([unit, date, checkin, LOS, total, avgNight]) => !isNaN(total));

这适用于大多数用途,但我还没有弄清楚如何保留列名以将它们作为 d3 多维类型即(平行坐标)中的轴来引用。我认为这可能与使用地图和过滤器有关?

【问题讨论】:

    标签: javascript csv dictionary d3.js


    【解决方案1】:

    当您加载 CSV 文件时,d3.csv 会创建一个方便的数组属性,名为 columns

    根据API

    返回的数组还公开了一个 columns 属性,其中包含按输入顺序排列的列名(与 Object.keys 不同,它的迭代顺序是任意的)。

    因此,由于您的回调参数被命名为data,您可以简单地使用:

    data.columns
    

    或将其分配给变量:

    var myColumns = data.columns
    

    这是一个演示,其中包含来自 Bostock's bl.ocks 的真实 CSV 文件:

    d3.csv("https://gist.githubusercontent.com/mbostock/3887051/raw/805adad40306cedf1a513c252ddd95e7c981885a/data.csv", function(data){
      console.log(data.columns);
    });
    <script src="https://d3js.org/d3.v4.min.js"></script>

    PS:这个答案是指 D3 v4,它应该是答案的默认版本,除非问题中另有说明。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-05
    • 2017-12-22
    • 2021-06-16
    • 2020-05-31
    • 2023-03-21
    • 2015-11-04
    • 2015-02-09
    相关资源
    最近更新 更多