Я использую ApexCharts для отображения данных из базы данных, и она прекрасно работает, пока мне не придется создавать несколько рядов данных.Я получаю данные в виде нескольких массивов, например, так (примечание: я не получаю список фруктов, это для примера)
var fruits = ["apple","apple","apple","apple","apple"]; // Name of the fruit
var dates = ["2019-04-01","2019-04-02","2019-04-03","2019-04-04","2019-04-05"];
var values = [14,9,17,5,11];
Куда фрукты [0] идут с датами [0] и значения [0] (считайте их строкой в базе данных).
В этом случае у меня есть только один ряд данных для передачи в ApexCharts, и я могу сделать это так:
var matchedData = [];
// I create nested arrays in matchedData, each array corresponding to a tuple, like so : matched[0] = [dates[0],values[0]]
for(let i = 0; i < fruits.length; i++) {
date = new Date(dates[i]); // To transform the date string to Javascript timestamp
matchedData[i] = [date.getTime(),values[i]];
}
var options = {
chart: {
type: 'line'
},
series: [{
label: "Data",
data: matchedData
}],
xaxis: {
type: 'datetime'
},
}
var chart = new ApexCharts(document.getElementById('chart'), options);
chart.render();
Но это работает только тогда, когда массив "fruits" содержит только один видфруктов и не разных видов.Поэтому, если мои массивы такие:
var fruits = ["apple","banana","apple","banana","strawberry"];
var dates = ["2019-04-01","2019-04-02","2019-04-03","2019-04-04","2019-04-05"];
var values = [14,9,17,5,11];
Мне нужно динамически создать 3 массива, названных в честь фруктов (так, в данном случае, «яблоко», «банан» и «клубника»), каждый изих содержащие соответствующую дату и значение.Каждый массив будет выглядеть так:
apple = [
["2019-04-01", 14], // I wrote the time in string for readability here but in reality it would be written in the JavaScript timestamp format
["2019-04-03", 17]
];
banana = [
["2019-04-02", 9],
["2019-04-04", 5]
];
strawberry = [
["2019-04-05",11]
];
И эти ряды данных будут передаваться в ApexCharts следующим образом:
var options = {
chart: {
type: 'line'
},
series: [
{
label: "apple",
data: apple
},{
label: "banana",
data: banana
},{
label: "strawberry",
data: strawberry
}
],
xaxis: {
type: 'datetime'
},
}
var chart = new ApexCharts(document.getElementById('chart'), options);
chart.render();
Моя проблема заключается в следующем:
Iне знаю, сколько серий мне нужно будет создать до времени выполнения, я не знаю их имени и не знаю, как динамически передать их в ApexCharts (если есть N серий, мне нужно N {label /данные} предложения).
У меня есть начало решения для динамического создания массива для каждого фрукта, это выглядит так:
for(let i = 0; i < fruits.length; i++) {
if(fruits[i] in window) {
date = new Date(dates[i]);
window[fruits[i]].push([date.getTime(),values[i]]);
} else {
window[lines[i]] = [];
date = new Date(dates[i]);
window[lines[i]].push([date.getTime(),values[i]]);
}
}
И затем я могу получить доступ к каждомумассив, но только если вы уже знаете, какие значения есть в массиве "fruits".