Javascript 更改图表类型给定:未捕获类型错误:无法读取属性';长度';未定义海图的定义

Javascript 更改图表类型给定:未捕获类型错误:无法读取属性';长度';未定义海图的定义,javascript,jquery,highcharts,Javascript,Jquery,Highcharts,我最初在烛台模式下加载图表 然后单击一个按钮,将其更改为行模式 烛台和折线图数据都有不同的数据点 candlestick = [[datetime, open, high, low, close], ....] line = [[datetime, close], ....] 按一下按钮 if (requiredType == "candlestick") { chart.series[seriesindex].update({ type: "c

我最初在烛台模式下加载图表

然后单击一个按钮,将其更改为模式

烛台和折线图数据都有不同的数据点

candlestick = [[datetime, open, high, low, close], ....]
line = [[datetime, close], ....]
按一下按钮

    if (requiredType == "candlestick") {
        chart.series[seriesindex].update({
            type: "candlestick",
            keys: ['x', 'open', 'high', 'low', 'close'],
            data: candlestick,
        }, true);

    } else if (requiredType == "line") {
        chart.series[seriesindex].update({
            type: "line",
            keys: ['x', 'y'],
            data: line,
        }, true);
    }
最初,图表以烛台模式加载。 单击“更改类型”按钮失败,并出现以下错误

Uncaught TypeError: Cannot read property 'length' of undefined
    at Object.high (highstock.src.js:47746)
    at v.ohlc (highstock.src.js:47764)
    at v.l (highstock.src.js:47865)
    at v.t.processData (highstock.src.js:48205)
    at v.F.processData (highstock.src.js:53103)
    at highstock.src.js:16601
    at Array.forEach (<anonymous>)
    at G.setTickInterval (highstock.src.js:16600)
    at G.setScale (highstock.src.js:16936)
    at highstock.src.js:24043
high    @   highstock.src.js:47746
ohlc    @   highstock.src.js:47764
l   @   highstock.src.js:47865
t.processData   @   highstock.src.js:48205
F.processData   @   highstock.src.js:53103
(anonymous) @   highstock.src.js:16601
setTickInterval @   highstock.src.js:16600
setScale    @   highstock.src.js:16936
(anonymous) @   highstock.src.js:24043
redraw  @   highstock.src.js:24041
update  @   highstock.src.js:34110
toggleChart @   fno.js:336
(anonymous) @   fno.js:907
dispatch    @   jquery.js:4435
r.handle    @   jquery.js:4121
Uncaught TypeError:无法读取未定义的属性'length'
at Object.high(highstock.src.js:47746)
在v.ohlc(highstock.src.js:47764)
在v.l(highstock.src.js:47865)
at v.t.processData(highstock.src.js:48205)
在v.F.processData(highstock.src.js:53103)
在highstock.src.js:16601
在Array.forEach()处
在G.setTickInterval(highstock.src.js:16600)
在G.setScale下(highstock.src.js:16936)
在highstock.src.js:24043
high@highstock.src.js:47746
ohlc@highstock.src.js:47764
l@highstock.src.js:47865
t、 processData@highstock.src.js:48205
F.processData@highstock.src.js:53103
(匿名)@highstock.src.js:16601
setTickInterval@highstock.src.js:16600
highstock.src.js处的设置刻度:16936
(匿名)@highstock.src.js:24043
重画@highstock.src.js:24041
更新@highstock.src.js:34110
toggleChart@fno.js:336
(匿名)@fno.js:907
dispatch@jquery.js:4435
r、 handle@jquery.js:4121
但是,如果最初我以直线模式加载图表,然后切换到烛台模式,那么它不会失败,而是让图表空着,而不绘制任何图形


另外,如果我在图表上只有很少的点,比如说10点,图表处于烛台模式,我把它切换到直线模式,那么它工作得很好,但是如果有更多的数据,比如说超过500点,它就不工作了

您还需要更新
近似值
,对于
系列,该近似值默认设置为
平均值
,对于
ohlc
系列,该近似值默认设置为
平均值

$('#line').on('click', function() {
    chart.series[0].update({
        type: 'line',
        dataGrouping: {
            approximation: 'average'
        },
        keys: ['x', 'y'],
        data: line
    });
});

$('#candlestick').on('click', function() {
    chart.series[0].update({
        type: 'candlestick',
        dataGrouping: {
            approximation: 'ohlc'
        },
        keys: ['x', 'open', 'high', 'low', 'close'],
        data: candlestick
    });
});
现场演示:


API参考:

Hi@maharshi,我试图重现这个问题,但似乎一切都正常:您能调整该示例以显示问题吗?Hi@ppotaczek I对于相同的代码,将数据增加到500,然后单击All。它不起作用。(也编辑了我的问题,从150到500)