TypeError:data.slice不是加载csv d3问题的函数

时间:2017-03-25 22:27:43

标签: javascript csv d3.js

var sales = d3.csv("Sales Export Friendly 3-19-17.csv", function(error, data) {
    //var parseDate = d3.time.format("%m/%d/%Y %H:%M:%S %p").parse;
    return {
        unit: data["Unit Booked"],
        date: new Date(data["Booking Date"]).getMonth() + 1,
        checkin: new Date(data["Checkin"]).getMonth() + 1,
        LOS: new Date(data["Checkout"]).valueOf() - new Date(data["Checkin"]).valueOf()/(24*60*60*1000),
        total: +data["Total Stay"],
        avgNight: (+data["Total Stay"]) / ((new Date(data["Checkout"]).valueOf() - new Date(data["Checkin"]).valueOf())/(24*60*60*1000))
        }
});

console.log(sales);
console.log(d3.keys(sales[0]));


parcoords = d3.parcoords()("#TopLeft");

parcoords

销售退货的控制台日志记录声明

Object { header: Cn/u.header(), mimeType: Cn/u.mimeType(), responseType: Cn/u.responseType(), response: Cn/u.response(), get: Cn/</u[n](), post: Cn/</u[n](), send: Cn/u.send(), abort: Cn/u.abort(), on: M/<(), row: e/o.row() }

我不确定这个奇怪的物体是怎么发生的。

以下console.log语句返回一个空数组。

最后,我得到一个TypeError:data.slice在调用parcoords时不是一个函数

1 个答案:

答案 0 :(得分:2)

在你的ante-penultimate question之前,你做得对:

d3.csv(url, function(data){
    //code here
});

然后,我不知道为什么,在你的previous question(只是现在我注意到了),在这个问题中,你开始这样做了:

var data = d3.csv(url, function(data){
    //the rest of the code

哪个不行。

问题在于:d3.csv 不会返回任何内容!从技术上讲,它返回一个与请求相关的对象(运行片段以查看它)...

var test = d3.csv("https://gist.githubusercontent.com/mbostock/3887051/raw/805adad40306cedf1a513c252ddd95e7c981885a/data.csv", function(data){
});

console.log(test);
<script src="https://d3js.org/d3.v4.min.js"></script>

......这不是你想要的。

因此,改回你正在做的事情......

d3.csv("Sales Export Friendly 3-19-17.csv", function(error, data) {
    //code here
})

...并放弃var sales

另外,请注意d3.csv 异步。因此,您必须在回调中console.log变量:

d3.csv("Sales Export Friendly 3-19-17.csv", function(error, data) {
    console.log(data)//this works 
});

console.log(data)//this will not work