f1vis/js/queries.js

96 lines
2.3 KiB
JavaScript

"use strict";
/*
* This file defines functions that create d3 datasets from the rawData provided by preprocessor.getResults()
*/
var queries = {
/*
* Count drivers belonging to nationalities
*/
getDriversByNationality: function() {
var rawData = preprocessor.getResults();
// Extract interesting data from raw data.
var nationalities = {};
for(var i in rawData.drivers) {
var d = rawData.drivers[i];
var nationality = d["nationality"];
if(nationalities[nationality] === undefined) {
nationalities[nationality] = 1;
} else {
nationalities[nationality] += 1;
}
}
// Transform into d3 dataset format
var dataset = [];
var n;
for(n in nationalities) {
dataset.push({
label: n,
count: nationalities[n]
});
}
// Return d3 dataset
return dataset;
},
getDriverById: function(driverId) {
var rawData = preprocessor.getResults();
var result = null;
var tempList = rawData.drivers.filter((cur) => (cur.driverId == driverId));
if(tempList.length > 0){
result = tempList[0];
}
// Return d3 dataset
return result;
},
getDriversByRaceId: function(raceId) {
var rawData = preprocessor.getResults();
var tempList = rawData.results.filter((cur) => (cur.raceId == raceId));
var result = tempList.map((cur) => queries.getDriverById(cur.driverId));
// Return d3 dataset
return result;
},
getLapDataByRaceId: function(raceId) {
var rawData = preprocessor.getResults();
var lapTimes = rawData['lapTimes'].filter((val) => val['raceId'] == raceId);
var myMap = new Map();
lapTimes.forEach(function(d,i) {
var lapNum = d["lap"];
var driverId = d["driverId"];
if(!myMap.has(lapNum)){
var data = [];
myMap.set(lapNum,data);
}
var dt = myMap.get(lapNum);
dt.push(d);
myMap.set(lapNum,dt);
});
myMap.forEach((d,i) => d.sort((o1,o2) => o1["position"] - o2["position"]));
return myMap;
},
getQualifingDataByRaceId: function(raceId) {
var rawData = preprocessor.getResults();
var result = rawData.qualifying.filter((cur) => (cur.raceId == raceId));
result.sort((o1,o2) => o1["position"] - o2["position"]);
return result;
}
};