Comment représenter une table en JSON

Un script optimal pour accéder à une valeur selon une clé en ligne et colonne.

Exemple avec la table suivante, qui enregistre le classement au championnat du monde de F1 pour différentes équipes.

  2013 2014 2015
Ferrari 3 4 2
Mercedes 2 1 1
Williams 9 3 3

Comment représenter ce tableau dans un fichier JSON de sorte que l'on puisse accéder à un résultat en donnant le nom de l'équipe et l'année, donc réaliser une sorte de requête SQL?

Le moyen le plus économique en ressources est d'établir un schéma décrivant les en-têtes de lignes et colonnes, puis déclarer une matrice correspondant à la partie complémentaire de la table:

3 4 2
2 1 1
9 3 3

Le schéma:

var teams = [ "Ferrari" , "Mercedes", "Williams"]
var years = [ "2013", "2014", "2015"]

La matrice:

var results = [
 [ 3, 4, 2],
 [ 2, 1, 1],
 [ 9, 3, 3] 
]

Ensuite on définit la requête:

function request(team, year) {
  var t = teams.indexOf(team)
  var y = years.indexOf(year)
  return results[t][y];
}

var team = "Williams"
var year = "2014"
var rank = request(team, year)
document.write(team + " ranking in " + year+ " : " + rank)

Démonstration:

Changer une valeur se fait selon le même principe avec un assignement: results[x][y] = valeur.
Ajouter une ligne ou une colonne se fait simplement avec les méthodes push ou splice de Array.

On peut aussi sur les tables de taille importante optimiser le code en fabriquant un index:

var iteams = {}
for(var i in teams) {
  iteams[teams[i]] = i
}

var iyears = {}
for(var i in years) {
  iyears[years[i]] = i
}

Ensuite on fait une requête directement ainsi:

var r = results[iteams[team], iyears[year]]
© 23 avril 2016 Xul.fr