Создайте гистограмму, используя chart.js и ассоциативный массив

#javascript #arrays #chart.js #associative-array

#javascript #массивы #chart.js #ассоциативный массив

Вопрос:

У меня есть ассоциативный массив, и я хочу отобразить его с помощью диаграммы.Библиотека JS.

Мой массив:

 array:4 [▼
  0 => array:3 [▼
    "faculty" => "Information Technology"
    "category" => "ELearning"
    "counter" => 2
  ]
  1 => array:3 [▼
    "faculty" => "Information Technology"
    "category" => "Webex"
    "counter" => 2
  ]
  2 => array:3 [▼
    "faculty" => "Masscom"
    "category" => "ELearning"
    "counter" => 3
  ]
  3 => array:3 [▼
    "faculty" => "Masscom"
    "category" => "Webex"
    "counter" => 3
  ]
]
 

Что я пытаюсь сделать:

Я пытаюсь показать: — Факультеты внизу в виде меток — Для каждого факультета я хочу показать всю категорию и ее счетчик

например:

1) Информационные технологии имеют категорию электронного обучения со значением 2 и имеют категорию Webex со значением 2

2) Masscom имеет категорию электронного обучения со значением 3 и имеет категорию Webex со значением 3

JS-код:

 var faculties = ['Information Technology', 'Masscom'];
var f = document.getElementById("mybarChart");
new Chart(f, {
    type: "bar",
    data: {
       labels: faculties,
       datasets: ....
    },
})
 

Ответ №1:

По сути, вам понадобится набор данных для каждой из ваших категорий. Для каждого набора данных потребуется ввод данных для каждого факультета.

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

диаграмма из кода скрипки JS

 // this will get distinct faculty and sort
const faculties = [...new Set(data.map(v => v['faculty']))].sort();

// this will get distinct category and sort
const categories = [...new Set(data.map(v => v['category']))].sort();

const datasets = categories.map(category => ({
  label: category,
  data: faculties.map(faculty => {
    const value = data.find(v => v['faculty'] === faculty amp;amp; v['category'] === category);

    return value['counter'];
  })
}));

const canvas = document.getElementById('mybarChart');

new Chart(canvas, {
  type: 'bar',
  data: {
    labels: faculties,
    datasets: datasets
  }
});
 

Я создал jsfiddle, чтобы показать запущенный код.