Отображение данных JSON в chartjs

Я хочу отображать эти данные с помощью chart.js. Идея состоит в том, чтобы визуализировать результаты опроса. Основной пользователь будет руководителем группы. Я думаю о трех линейных диаграммах для всех questionId. Диаграмма отобразит дату, имя человека и значение из вопроса.

getHistoricalData() {
return [
    {
        date: "2018-03-14T12:00:00Z",
        results: [
            {
                teamMemberId: "Abby",
                questions: [
                    {
                        questionId: "1",
                        value: 5
                    },
                    {
                        questionId: "2",
                        value: 3
                    },
                    {
                        questionId: "3",
                        value: 3
                    }
                ]
            },
            {
                teamMemberId: "Bill",
                questions: [
                    {
                        questionId: "1",
                        value: 4
                    },
                    {
                        questionId: "2",
                        value: 4
                    },
                    {
                        questionId: "3",
                        value: 4
                    }
                ]
            },
            {
                teamMemberId: "Castor",
                questions: [
                    {
                        questionId: "1",
                        value: 5
                    },
                    {
                        questionId: "2",
                        value: 5
                    },
                    {
                        questionId: "3",
                        value: 5
                    }
                ]
            },
            {
                teamMemberId: "David",
                questions: [
                    {
                        questionId: "1",
                        value: 5
                    },
                    {
                        questionId: "2",
                        value: 3
                    },
                    {
                        questionId: "3",
                        value: 3
                    }
                ]
            },
            {
                teamMemberId: "Eugenia",
                questions: [
                    {
                        questionId: "1",
                        value: 2
                    },
                    {
                        questionId: "2",
                        value: 3
                    },
                    {
                        questionId: "3",
                        value: 4
                    }
                ]
            }
        ]
    },
    {
        date: "2018-03-07T12:00:00Z",
        results: [
            {
                teamMemberId: "Abby",
                questions: [
                    {
                        questionId: "1",
                        value: 5
                    },
                    {
                        questionId: "2",
                        value: 4
                    },
                    {
                        questionId: "3",
                        value: 5
                    }
                ]
            },
            {
                teamMemberId: "",
                questions: [
                    {
                        questionId: "1",
                        value: 4
                    },
                    {
                        questionId: "2",
                        value: 3
                    },
                    {
                        questionId: "3",
                        value: 4
                    }
                ]
            },
            {
                teamMemberId: "Castor",
                questions: [
                    {
                        questionId: "1",
                        value: 4
                    },
                    {
                        questionId: "2",
                        value: 4
                    },
                    {
                        questionId: "3",
                        value: 5
                    }
                ]
            },
            {
                teamMemberId: "David",
                questions: [
                    {
                        questionId: "1",
                        value: 4
                    },
                    {
                        questionId: "2",
                        value: 4
                    },
                    {
                        questionId: "3",
                        value: 2
                    }
                ]
            },
            {
                teamMemberId: "Eugenia",
                questions: [
                    {
                        questionId: "1",
                        value: 3
                    },
                    {
                        questionId: "2",
                        value: 3
                    },
                    {
                        questionId: "3",
                        value: 3
                    }
                ]
            }
        ]
    },
];
};

Я не знаю, как загружать такие данные. Заранее спасибо.

Krzysiek

ваши данные пришли из PHP?

Rhalp Darren Cabrera 17.03.2018 14:09

покажи нам, что ты пробовал? мы здесь не для того, чтобы делать вашу работу: D

Satyam Pathak 17.03.2018 14:12

Какой у Вас вопрос?

progNewbie 17.03.2018 14:22

@satyampathak const CHART = document.getElementById ('lineChart'); var lineChart = new Chart (CHART, {type: 'line', data: {labels: Object.keys (data [results.teamMemberId]]), datasets: [{label: 'My first dataset', fill: false, lineTension: 0, backgroundColor: «rgba (75,192,192,0.4)», borderColor: «rgba (75,192,192,1)», borderCapStyle: 'butt', borderDash: [], borderDashOffset: 0.0, borderJointStyle: 'miter', данные: Object.values (данные [results.questions.questionId])}]}})

krmnow 17.03.2018 14:35

@RhalpDarrenCabrera нет, из файла js

krmnow 17.03.2018 14:36

@progNewbie как отображать данные из getHistoricalData () в chart.js

krmnow 17.03.2018 14:39

У тебя две разные даты. Итак, как должна выглядеть диаграмма?

progNewbie 17.03.2018 15:09

@progNewbie Я подумал о двух графиках - по одному на каждую дату, с людьми и их ценностями

krmnow 17.03.2018 15:16

Но у каждого человека есть три разных значения. Как ты хочешь это представить? Если вы можете четко сказать мне, я могу вам помочь.

progNewbie 17.03.2018 15:21

@progNewbie хорошо, может быть так: первый график покажет, например, значение из questionId: «1» для всех людей за один день, второй: значение из questionId: «1» за второй день. И так со всеми ценностями.

krmnow 17.03.2018 15:29

Тогда вам понадобится более двух графиков.

progNewbie 17.03.2018 15:33

@progNewbie да, я думаю, что основная проблема в том, что я не знаю, как это делать :) может быть, если я найду способ сделать сначала, тогда будет легче сделать это правильно

krmnow 17.03.2018 15:35
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
12
699
1

Ответы 1

Вам нужно сделать что-то вроде этого это

Попробуйте прочитать свои данные так:

var dates = [];
var allTeamMember = [];

getHistoricalData().forEach(function(element, index, array) {
  dates.push(element.date);
  var teamMember = []
  element.results.forEach(function(element, index, array) {
    var questions = [];
    element.questions.forEach(function(element, index, array) {
        questions.push(element.value);
    });
    teamMember[element.teamMemberId] = questions;
  });
  allTeamMember.push(teamMember);
});

Это дает вам массив со всеми датами. А также массив, имеющий внутренний массив для каждой даты, содержащий всех членов команды с их значениями вопросов.

Получив эти данные, вы можете сгенерировать из них диаграммы следующим образом:

dates.forEach(function(element, index, array) {


$("#charts").append("<canvas id=\"chart-" + index + "\" width=\"400\" height=\"400\"></canvas>");
  var ctx = $("#chart-" + index);
  var myChart = new Chart(ctx, {
    type: 'line',
    data: {
        labels: [1,2,3],
        datasets: [{
            label: 'Datum: ' + dates[index],
            data: allTeamMember[index][getKeys(allTeamMember[index])[0]],
            backgroundColor: [
                'rgba(255, 99, 132, 0.2)',
                'rgba(54, 162, 235, 0.2)',
                'rgba(255, 206, 86, 0.2)',
                'rgba(75, 192, 192, 0.2)',
                'rgba(153, 102, 255, 0.2)',
                'rgba(255, 159, 64, 0.2)'
            ],
            borderColor: [
                'rgba(255,99,132,1)',
                'rgba(54, 162, 235, 1)',
                'rgba(255, 206, 86, 1)',
                'rgba(75, 192, 192, 1)',
                'rgba(153, 102, 255, 1)',
                'rgba(255, 159, 64, 1)'
            ],
            borderWidth: 1
        }]
    },
    options: {
        scales: {
            yAxes: [{
                ticks: {
                    beginAtZero:true
                }
            }]
        }
    }
});


});

function getKeys(obj, filter) {
    var name,
        result = [];

    for (name in obj) {
        if ((!filter || filter.test(name)) && obj.hasOwnProperty(name)) {
            result[result.length] = name;
        }
    }
    return result;
}

вам нужно не всегда брать нулевой индекс, как я, а перебирать ваши teamMembers.

Надеюсь, это поможет. Просто попробуйте сделать это сами.

Другие вопросы по теме