Skip to content

Instantly share code, notes, and snippets.

@palamago
Last active March 22, 2016 23:23
Show Gist options
  • Save palamago/38b515aee5e2e20e5c31 to your computer and use it in GitHub Desktop.
Save palamago/38b515aee5e2e20e5c31 to your computer and use it in GitHub Desktop.
Convert Flat data to Flare data (children) structure using just D3.js
<html lang="en">
<head>
</head>
<body>
<h1>Flat data to Flare (children) structure using only D3.js</h1>
<p>See console</p>
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="main.js" charset="utf-8"></script>
</body>
</html>
function toFlare(data, id_attr, parent_id_attr, root_id_value) {
var flareData = [];
//root node
var root = {};
if (root_id_value) {
console.log(root);
} else {
//Asume the first one
root = data.shift();
root.id = root[id_attr];
}
flareData.push(root);
var nestedData = d3.nest()
.key(function(d) {
d.id = d[id_attr];
return d[parent_id_attr];
})
.rollup(function(v) {
return v
})
.map(data);
function completeChildren(parentsArray) {
parentsArray.forEach(function(e){
if(nestedData[e.id]){
e.children = nestedData[e.id];
delete nestedData[e.id];
completeChildren(e.children);
}
});
}
completeChildren(flareData);
return flareData;
}
var DATA = [{
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "PRESIDENCIA DE LA NACIÓN",
"reporta_a": "PRESIDENCIA DE LA NACIÓN",
"unidad_tipo": 0,
"autoridad_apellido": "MACRI",
"autoridad_nombre": "Mauricio"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "VICEPRESIDENCIA",
"reporta_a": "PRESIDENCIA DE LA NACIÓN",
"unidad_tipo": 0,
"autoridad_apellido": "MICHETTI",
"autoridad_nombre": "Marta Gabriela"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Secretaría General",
"reporta_a": "VICEPRESIDENCIA",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "DE ANDREIS",
"autoridad_nombre": "Fernando"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Subsecretaría de Coordinación",
"reporta_a": "Secretaría General",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "ACEVEDO",
"autoridad_nombre": "Jesús Mariano"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Coordinador General de Asuntos Presidenciales",
"reporta_a": "Secretaría General",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "BIELUS",
"autoridad_nombre": "Hernán A."
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Subsecretaría General",
"reporta_a": "Secretaría General",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "DÍAZ GILLIGAN",
"autoridad_nombre": "Valentín"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Subsecretaría de Relaciones con la Sociedad Civil",
"reporta_a": "Secretaría General",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "MORALES",
"autoridad_nombre": "Federico Agustín Félix"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Casa Militar",
"reporta_a": "Secretaría General",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "YOFRE",
"autoridad_nombre": "José Luis"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Secretaría Legal y Técnica",
"reporta_a": "PRESIDENCIA DE LA NACIÓN",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "CLUSELLAS",
"autoridad_nombre": "Pablo"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Subsecretaría de Asuntos Legales",
"reporta_a": "Secretaría Legal y Técnica",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "HERRERA BRAVO",
"autoridad_nombre": "Dante Javier"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Subsecretaría Técnica",
"reporta_a": "Subsecretaría de Asuntos Legales",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "INZA",
"autoridad_nombre": "María Fernanda"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Agencia Federal de Inteligencia",
"reporta_a": "PRESIDENCIA DE LA NACIÓN",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "ARRIBAS",
"autoridad_nombre": "Gustavo Héctor"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Secretaría de Programación para la Prevención de la Drogadicción y la Lucha Contra el Narcotráfico",
"reporta_a": "PRESIDENCIA DE LA NACIÓN",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "MORO",
"autoridad_nombre": "Roberto Esteban"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Subsecretaría de Diseño, Monitoreo y Evaluación de Abordaje Territorial, Relaciones Internacionales y Control de Precursores Químicos",
"reporta_a": "Secretaría de Programación para la Prevención de la Drogadicción y la Lucha Contra el Narcotráfico (SEDRONAR)",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "SAYA",
"autoridad_nombre": "Lidia Noemi"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Subsecretaría de Prevención, Capacitación y Asistencia de las Adicciones",
"reporta_a": "Secretaría de Programación para la Prevención de la Drogadicción y la Lucha Contra el Narcotráfico (SEDRONAR)",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "CANAY",
"autoridad_nombre": "Roberto Oscar"
}, {
"jurisdiccion": "PRESIDENCIA DE LA NACIÓN",
"unidad": "Subsecretaría de Coordinación Administrativa",
"reporta_a": "Secretaría de Programación para la Prevención de la Drogadicción y la Lucha Contra el Narcotráfico (SEDRONAR)",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "VASQUEZ",
"autoridad_nombre": "Ramón Francisco"
}, {
"jurisdiccion": "JEFATURA DE GABINETE DE MINISTROS",
"unidad": "Jefatura de Gabinete de Ministros",
"reporta_a": "PRESIDENCIA DE LA NACIÓN",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "PEÑA",
"autoridad_nombre": "Marcos"
}, {
"jurisdiccion": "JEFATURA DE GABINETE DE MINISTROS",
"unidad": "Secretaría de Asuntos Estrátegicos",
"reporta_a": "JEFATURA DE GABINETE DE MINISTROS",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "POMPEO",
"autoridad_nombre": "Fulvio Valerio"
}, {
"jurisdiccion": "JEFATURA DE GABINETE DE MINISTROS",
"unidad": "Subsecretaría de Asuntos Globales",
"reporta_a": "Secretaría de Asuntos Estrátegicos",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "DI CHIARO",
"autoridad_nombre": "Paola Iris"
}, {
"jurisdiccion": "JEFATURA DE GABINETE DE MINISTROS",
"unidad": "Subsecretaría de Asuntos Institucionales",
"reporta_a": "Secretaría de Asuntos Estrátegicos",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "GARCÍA OLIVER",
"autoridad_nombre": "Matías"
}, {
"jurisdiccion": "JEFATURA DE GABINETE DE MINISTROS",
"unidad": "Secretaría de Coordinación de Políticas Públicas",
"reporta_a": "JEFATURA DE GABINETE DE MINISTROS",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "LOPETEGUI",
"autoridad_nombre": "Gustavo Sebastián"
}, {
"jurisdiccion": "JEFATURA DE GABINETE DE MINISTROS",
"unidad": "Subsecretaría de Evaluación del Presupuesto Nacional",
"reporta_a": "Secretaría de Coordinación de Políticas Públicas",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "PENA",
"autoridad_nombre": "Rodrigo Héctor"
}, {
"jurisdiccion": "JEFATURA DE GABINETE DE MINISTROS",
"unidad": "Secretaría de Comunicación Pública",
"reporta_a": "JEFATURA DE GABINETE DE MINISTROS",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "GRECCO",
"autoridad_nombre": "Jorge Miguel"
}, {
"jurisdiccion": "JEFATURA DE GABINETE DE MINISTROS",
"unidad": "Subsecretaría de Comunicación Pública",
"reporta_a": "Secretaría de Comunicación Pública",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "GENTILE",
"autoridad_nombre": "Juan Gabriel"
}, {
"jurisdiccion": "MINISTERIO DE COMUNICACIONESss",
"unidad": "Secretaría de Promoción de Inversiones",
"reporta_a": "Subsecretaría de Comunicación Pública",
"unidad_tipo": "Administración Centralizada",
"autoridad_apellido": "LIFSIC",
"autoridad_nombre": "Clarisa Diana"
}];
//execute
var flaredData = toFlare(DATA, "unidad", "reporta_a");
//render
console.log(flaredData);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment