Je rencontre des difficultés pour transformer certaines données CSV en un format acceptable par le diagramme de zone empilée NVD3 (exemple de données présentées ici: http://nvd3.org/examples/stackedAreaData.json). J'ai actuellement un tableau d'objets dont les valeurs sont des paires d'objets clé-valeur, mais j'ai besoin de le transformer en un tableau d'objets dont les valeurs sont un tableau de tableaux.Convertir un sous-tableau d'objets avec paires clé-valeur en tableau de tableaux
à quoi il ressemble maintenant:
[{"key":"path1","values":[{"key":1,"value": x},{"key":2,"value": y},{"key":3,"value": z}]},{"key":"path2","values":[{"key":1,"value": a},{"key":1,"value": b},{"key":1,"value": c}]}]
Comment le résultat:
[{"key":"path1","values":[[1,x],[2,y],[3,z]]},{"key":"path2","values":[[1,a],[2,b],[3,c]]}]
En d'autres termes, je dois changer les « valeurs » dans chaque objet correspondant à un « chemin » (chemin1, chemin2, etc.) d'un tableau d'objets dans un tableau de tableaux (qui sont juste les valeurs des propriétés d'objet "clé" et "valeur".)
Mon code actuel est affiché ici:
d3.csv("http://monicawojciechowski.github.io/pathtoplayoff/full_data.csv", function(d) {
return {
path: +d.path,
week: +d.week,
playoff: +d.playoff,
tm: d.tm,
conf: d.conf,
div: d.div,
conf_div: d.conf_div
};
},
function(data) {
var rawdata = data;
console.log(rawdata);
var databypath_rollup = d3.nest()
.key(function(d) {return +d.path; }).sortKeys((a, b) => d3.ascending(+a, +b))
.key(function(d) {return +d.week; }).sortKeys((a, b) => d3.ascending(+a, +b))
.rollup(function(leaves) {return d3.sum(leaves, function(d) {return parseFloat(d.playoff);})})
.entries(rawdata);
console.log(databypath_rollup);
Lorsque je tente de modifier le tableau d'objets à un tableau de tableaux, en procédant comme suit:
var arrayformat = databypath_rollup.map(function(obj) {
return Object.keys(obj).sort().map(function(key) {
return obj[key];
});
});
console.log(arrayformat);
Je change par erreur le tableau extérieur d'objets dans un tableau de tableaux. Je veux garder le plus haut niveau de paires clé-valeur, tout en changeant le sous-niveau en [1, y] (vs {"clé": 1, "valeur": y})
Des pensées?
Merci Chris - cette solution fonctionne très bien et m'a sauvé des maux de tête beaucoup d'avenir! Vous avez raison d'utiliser ES5, mais je vous remercie de partager la solution pour ES6. – monw
content d'entendre ça! bonne chance –