Для высокопроизводительных диаграмм мне нужно генерировать данные синтаксического анализа для генерации серий. данные из API выглядит следующим образом:Проведите анализ массива в js
[ date : XX,
series : [
player_id : 1,
team_id : 1,
score : 4 ],
[
player_id : 2,
team_id : 4,
score : 1 ],
[
player_id : 4,
team_id : 1,
score : 4 ]
],
[ date : XX+1
series : ...
],
...
Во-первых, пользователь должен выбрать команду и игроков, но иногда нет никакого результата. Например, для даты XX я выбрал 4 идентификатора команды, но API возвращает только 2 из них. Я должен принять это во внимание. Я пытаюсь использовать разные типы сериалов, первый представляет все результаты команды, второй - всех игроков, а другой - для каждой команды. Таким образом, существует много графиков.
Я использую Ampserand.js, модель такая же, но он называется столько же времени, сколько количество команд, выбранных в форме.
я сделал что-то вроде этого:
function parse(data) {
var series = [];
var dates = [];
var findIndexByValue = function(arraytosearch, key, valuetosearch) {
for (var i = 0; i < arraytosearch.length; i++) {
if (arraytosearch[i][key] == valuetosearch) {
return i;
}
}
return null;
}
for (var i = 0; i < data.length; i++) {
var dTemp = new Date(data[i].date).getTime();
// Keep dates in case of empty values
dates.push(dTemp);
for (var s = 0; s < data[i].series.length; s++) {
var current = data[i].series[s];
if (this.currentype === "allTeamSeries") {
var currentIndex = findIndexByValue(series, "team", current.team_id);
if (currentIndex === null) {
series.push({
team: current.team_id,
data: [dTemp, current.avg]
});
} else {
series[currentIndex].data.push([dTemp, current.score]);
}
} else if (this.currentResource === "playerseries") {
var currentIndex = findIndexByValue(series, "player", current.player_id);
if (currentIndex === null) {
series.push({
player: current.player_id,
data: [dTemp, current.score]
});
} else {
series[currentIndex].data.push([dTemp, current.score]);
}
} else { //currentTeam from model
if (this.currentTeam === current.team_id) {
var currentIndex = findIndexByValue(series, "site", current.site_id);
if (currentIndex === null) {
series.push({
team: current.team_id,
data: [dTemp, current.score]
});
} else {
series[currentIndex].data.push([dTemp, current.score]);
}
}
}
}
}
// Avoid empty charts
if (series.length === 0) {
series.push({
team: this.currentTeam,
data: []
});
dates.forEach(function(elem) {
series[0].data.push([elem, 0]);
});
}
return {
startdate: this.config.startdate,
enddate: this.config.enddate,
series: series
};
}
У меня есть проблема с серией генерируемой, когда нет никакого результата для команды в результате этого API.
пригодный для использования массива должен быть, как это, например:
series: [{
name: 'Team 1',
data: [4163, 5203, 6276, 5408, 3547, 3729, 3828,4163, 5203, 6276, 5408, 3547, 3729, 3828,4163, 5203, 6276, 5408, 3547, 3729, 3828]
},
{
name: 'Team 2',
data: [...]
}]
Кроме того, код выглядит излишним, есть трюк с некоторой функцией массива, чтобы сделать это легко?
Заранее спасибо, большая проблема для меня здесь!