使用地图创建字典&过滤?

时间:2017-03-23 06:07:46

标签: javascript csv dictionary d3.js

我有以下地图和过滤功能,以便将我们的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多维类型的viz(并行坐标)中的轴。我认为这可能与地图和过滤器的使用有关吗?

1 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;

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