#arrays #charts #chart.js #label #ejs
Вопрос:
Я использую Chart.js чтобы составить линейный график. Работа кода заключается в следующем. (Снимки кода ниже)
- Данные извлекаются из MongoDB, а затем массив числовых данных передается в файл ejs.
- В файле ejs, когда отдельные элементы извлеченных данных передаются в массив данных, он работает правильно, но не тогда, когда передается весь массив.
График должен выглядеть следующим образом:
(Всего 30 значений, но для выборки передается только 5)
Но когда я передаю весь массив в данные, тогда это происходит:
Соответствующий код выглядит следующим образом.
Первый код (с использованием express, а данные для графика приведены в разделе «цены». Это массив, как я уже неоднократно подтверждал.Кроме того, отдельный тег используется для чего-то другого и не является необходимым для диаграммы.)
app.get('/:symb', async (req, res) => { const { symb } = req.params;
let prices = await (await price.find({ Symbol: symb }).distinct("Data.Close")).slice(-30);
res.render('individual.ejs', { prices, individual });
Второй код (с использованием ejs)
<canvas id="myChart" width="400" height="400"></canvas>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: `<%=base %>`,
datasets: [{
label: '# of Votes',
data: `<%= prices %>`,
backgroundColor: 'green', options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
}
}
}]
}
});
(Здесь метки «база» представляют собой массив строк от 1 до 30 [‘1′,’2’,’3’…] и это всего лишь подсчет основных данных «цены».
Ответ №1:
Похоже, ваша проблема в том, что вы преобразуете массив меток в строку, окружая его обратными указателями. Chart.js ему это не нравится. Если вы удалите обратные метки вокруг переменной массива меток, а также вокруг переменной данных, это должно работать нормально
Комментарии:
1. ОГРОМНОЕ ВАМ СПАСИБО!! ПРОБЛЕМА РЕШАЕТСЯ ПУТЕМ ПРЕОБРАЗОВАНИЯ СТРОКИ В МАССИВ С ПОМОЩЬЮ string.split.