Javascript 高图表的高效多图表拖动选择

Javascript 高图表的高效多图表拖动选择,javascript,jquery,charts,highcharts,Javascript,Jquery,Charts,Highcharts,我已经使用Highcharts文档为图表启用了拖动选择。我试图扩展它,以便在我的第一张图表上选择的任何点,也将在页面上的其他图表上选择(x轴匹配) 我已经想出了一个方法来实现这一点&它对页面上的2个或3个高图表非常有效,但是当我选择了4个或更多高图表的多个点(每个图表总共约1500点)时,它会出现严重的延迟。 这可能是因为我使用了嵌套for循环,但我想知道是否有人有任何提高代码效率的技巧(或者这是否就是问题所在)。第一个功能是Highcharts文档中提供的功能;第二个函数(updateChar

我已经使用Highcharts文档为图表启用了拖动选择。我试图扩展它,以便在我的第一张图表上选择的任何点,也将在页面上的其他图表上选择(x轴匹配)

我已经想出了一个方法来实现这一点&它对页面上的2个或3个高图表非常有效,但是当我选择了4个或更多高图表的多个点(每个图表总共约1500点)时,它会出现严重的延迟。 这可能是因为我使用了嵌套for循环,但我想知道是否有人有任何提高代码效率的技巧(或者这是否就是问题所在)。第一个功能是Highcharts文档中提供的功能;第二个函数(updateCharts())就是我使用的函数

我以前从来没有使用过highcharts,也没有用javascript编写过很多程序,所以我对这一切的工作原理还是有点不熟悉

function selectPointsByDrag(e) {

    // Select points
    Highcharts.each(this.series, function (series) {
        Highcharts.each(series.points, function (point) {
            if (point.x >= e.xAxis[0].min && point.x <= e.xAxis[0].max &&
                    point.y >= e.yAxis[0].min && point.y <= e.yAxis[0].max) {
                point.select(true, true);
            }
        });
    });

    // Fire a custom event
    Highcharts.fireEvent(this, 'selectedpoints', { points: this.getSelectedPoints() });
    updateCharts(this);

    return false; // Don't zoom
};

function updateCharts(curr_chart){

    var count;
    var counter;
    var allChartArray = [chart, chart1, chart2, chart3];
    var indexOfCurrentChart = allChartArray.indexOf(curr_chart);

    if (indexOfCurrentChart > -1) {
        allChartArray.splice(indexOfCurrentChart, 1);
    };

    bla = curr_chart.getSelectedPoints();

    for(count = 0; count < allChartArray.length; count++){
        for(counter = 0; counter < bla.length; counter++){
            allChartArray[count].series[0].data[bla[counter].index].select(true, true)
        };
    };

};
函数选择指针缓冲器(e){
//选择点
Highcharts.each(本系列,函数系列){
Highcharts.each(系列点、功能点){

如果(point.x>=e.xAxis[0].min&&point.x=e.yAxis[0].min&&point.y使用浏览器探查器查看程序的哪个部分是滞后的原因。如果点的索引相同,则可以在同一循环中为其他图表选择点。不要使用getSelectedPoints()-每次调用时,需要循环所有点并对其进行过滤-而是创建一个数组并推送选定点(循环时)。您还可以设置一些处理动画、循环块等。如果不够,您可以执行一些数据预处理(kdtree)使用浏览器探查器,查看程序的哪个部分是滞后的原因。如果点的索引相同,则可以为同一循环中的其他图表选择点。不要使用getSelectedPoints()-每次调用它时,都需要循环所有点并对其进行过滤-而是创建数组并推送选定点(循环时)。您还可以设置一些处理动画、循环块等。如果不够,您可以执行一些数据预处理(kdtree)