Parsing CSV data into JS Objects to use in chart. Uncaught ReferenceError: data is not defined(jsfiddle included)

Parsing CSV data into JS Objects to use in chart. Uncaught ReferenceError: data is not defined(jsfiddle included)

这是我正在尝试做的事情:

  1. 使用 papa parse 解析 CSV 文件。

  2. 使用解析后的数据创建两个 JS 对象(ohlc 和 volume)。

  3. 然后该数据用于创建 highstocks 图表。

使用 papa 解析示例进行解析:

function doStuff(data) {
    //do stuff here
    console.log(data);
}

function parseData(url, callBack) {
    Papa.parse(url, {
        download: true,
        dynamicTyping: true,
        complete: function(results) {
            callBack(results.data);
        }
    });
}

parseData("https://www.quandl.com/api/v3/datasets/WIKI/AAPL.csv", doStuff);

一个有效的 Highchart 示例:jsfiddle

我试图结合前两个例子:jsfiddle

$(function () {

    var ohlc = [],
    volume = [],
    dataLength = data.length,
    // set the allowed units for data grouping
    groupingUnits = [[
        'week',                         // unit name
        [1]                             // allowed multiples
    ], [
        'month',
        [1, 2, 3, 4, 6]
    ]],

    i = 1;

    function parseData(url, callBack) {
        Papa.parse(url, {
            download: true,
            dynamicTyping: true,
            complete: function(results) {
                callBack(results.data);
            }
        });
    }

    function setObjects(data) {
        console.log(data[i][0]);

        for (i; i < dataLength; i += 1) {
            ohlc.push([
                data[i][0], // the date
                data[i][1], // open
                data[i][2], // high
                data[i][3], // low
                data[i][4] // close
            ]);

            volume.push([
                data[i][0], // the date
                data[i][5] // the volume
            ]);
        }
    }

    parseData("https://www.quandl.com/api/v3/datasets/WIKI/AAPL.csv", setObjects);

    // create the chart
    $('#container').highcharts('StockChart', {

        rangeSelector: {
            selected: 1
        },

        title: {
            text: 'AAPL Historical'
        },

        yAxis: [{
            labels: {
                align: 'right',
                x: -3
            },
            title: {
                text: 'OHLC'
            },
            height: '60%',
            lineWidth: 2
        }, {
            labels: {
                align: 'right',
                x: -3
            },
            title: {
                text: 'Volume'
            },
            top: '65%',
            height: '35%',
            offset: 0,
            lineWidth: 2
        }],

        series: [{
            type: 'candlestick',
            name: 'AAPL',
            data: ohlc,
            dataGrouping: {
                units: groupingUnits
            }
        }, {
            type: 'column',
            name: 'Volume',
            data: volume,
            yAxis: 1,
            dataGrouping: {
            units: groupingUnits
            }
        }]
    });
});

谁能帮我解决我做错了什么?我知道有两件事还没有完成。数据需要反转,以便按日期升序排列。并且日期需要转换为毫秒。但是,它会帮助我获取当前数据,至少先插入到对象中,然后再从那里开始。

这个位

var i = 1;
dataLength = data.length;

应该在 setObjects function 的第一行,其中存在数据并且实际使用值 dataLength