Ошибка при повторной сортировке столбчатой ​​диаграммы в диаграмме JS: «Ошибка TypeError: undefined не является объектом (вычисление« chart.data.datasets [vi] .data »)» - PullRequest
0 голосов
/ 19 апреля 2020

Я использую этот плагин ниже, чтобы отсортировать гистограмму с накоплением, используя диаграмму js. У меня есть кнопка, которая выполняет следующий скрипт:

function sortInschrijfPrijs() {
myChart.options.plugins.p1 = true;
myChart.update();
myChart.options.plugins.p1 = false;};

Это работает нормально, но когда я снова нажимаю кнопку, я получаю следующую ошибку: "" TypeError: undefined не является объектом (вычисляя 'диаграмму) .data.datasets [vi] .data ') ". Журнал консоли непосредственно перед:" chart.data.datasets [vi] .data [i] = v; "показывает, что есть данные. Надеюсь, что любой может помочь мне здесь, Я действительно застрял. Это плагин

Chart.plugins.register({    
    id:"p1",                                                                                                                                                         
    datasets: [],                                                                                                                                                                    
    getData(labels, datasets) {                                                                                                                                                      
        const sum = [];                                                                                                                                                              
        for (i = 0; i < datasets[0].length; i++) {                                                                                                                                   
            sum.push({                                                                                                                                                               
                label: labels[i],                                                                                                                                                    
                data: datasets.map(e => e[i]),                                                                                                                                       
                    get sum() { // ES6 - getter                                                                                                                                      
                        return this.data.reduce((a, b) => a + b);                                                                                                                    
                    },                                                                                                                                                                                  
            });                                                                                                                                                                      
        }                                                                                                                                                                            
        return sum;                                                                                                                                                                  
    },                                                                                                                                                                               
    beforeUpdate(chart) {                                                                                                                                                              
        chart.data.datasets.forEach((dataset, datasetIndex) => {                                                                                                                     
            this.datasets.push(dataset.data);                                                                                                                                        
        });                                                                                                                                                                          
        const data_store = this.getData(chart.data.labels, this.datasets).sort((a,b) => b.sum - a.sum);                                                                              

        data_store.forEach((d,i) => {                                                                                                                                                
            chart.data.labels[i] = d.label;                                                                                                                                                                                 
            d.data.forEach((v, vi) => {
                console.log(chart.data.datasets[vi].data[i]);                                                                                                                                                
                chart.data.datasets[vi].data[i] = v;                                                                                                                                                    
            });                                                                                                                                                                                     
        });                                                                                                                                                              
    }                                                                                                                                                                                
}); 
...