Вам необходимо отобразить данные по clientId.Затем каждый clientId может быть сопоставлен, чтобы взять cpuUsage, timeStamp, clientId.Вы можете создать массив, каждый клиент которого имеет свои данные из предыдущей карты.Затем вы можете добавить диаграмму так:
_.forEach(clients, function(client) {
$('<div class="chart">')
.appendTo('#container')
.highcharts({
marker: {
states: {
enabled: true
}
},
rangeSelector: {
buttons: [{
count: 1,
type: "minute",
text: "Sec"
},
{
count: 1,
type: "hour",
text: "Min"
},
{
count: 1,
type: "day",
text: "Hours"
},
{
type: "all",
text: "All"
}
],
title: "hours",
inputEnabled: true,
_selected: 1
},
title: {
text: client.name
},
xAxis: {
title: {
enabled: true,
text: "CPU USAGE"
},
type: "datetime",
dateTimeLabelFormats: {
second: "%H:%M:%S",
minute: "%H:%M",
hour: "%H:%M",
day: "%e. %b",
week: "%e. %b",
day: "%Y<br/>%b-%d"
}
},
plotOptions: {
series: {
marker: {
enabled: true,
radius: 3,
fillColor: "#007ab3"
}
}
},
series: [{
name: "CPU USAGE",
data: client.data.sort()
}],
chart: {
renderTo: "container" + name
}
});
})
Я использовал lodash в качестве помощника для отображения данных, но вы можете использовать все, что захотите.Я считаю, что анализировать данные намного проще.
var mappedClients = _.map(_.uniqBy(data, "clientId"), "clientId"); <-- ALL UNIQUE CLIENTS
var clients = [];
_.forEach(mappedClients, function(clientId) {
var tempClient = {
name: clientId,
data: []
};
_.forEach(data, function(tempData) { <--- MAPPING THROUGH ALL DATA TO FIND A MATCH FOR EACH UNIQUE CLIENT
if (clientId === tempData.clientId) {
_.forEach(tempData.clientData, function(clientData) { <-- THEN MAP CLIENTDATA ARRAY OF THE CLIENT TO KEEP THE DATA THAT WE WANT
tempClient.data.push(
[clientData.cpuUsage, clientData.timestamp, clientId]
);
})
}
});
clients.push(tempClient);
});
проверьте работающий пример jsfiddle на основе вашей информации Jsfiddle