Quiero que regionValue regrese como la clave del objeto Region, pero en su lugar devuelve nulo.
Mi objetivo es conseguir:
{ value: 1122000, Tid: '2020', ContentsCode: 'Samlet inntekt, median (kr)', HusholdType: 'Par med barn 0-17 år', Region: 'Ringerike', regionValue:"3007" },pero esto es lo que he intentado hasta ahora:
const JSONstat = require("jsonstat-toolkit"); var url="https://data.ssb.no/api/v0/dataset/49678.json?lang=no"; function test(){ return JSONstat(url).then(main); } async function main(j){ var ds=j.Dataset(0); let y="Region" let array = ds.toTable( { type : "arrobj" } ,function( d ){ if ( d.value!==null){ d.regionValue = ds.Dimension(y).Category(d.Region).id return d; } }) console.log(array) } test()Parece que la dimensión Región solo está disponible como un objeto con ID -> Label , por lo que no puede buscar directamente por nombre de Región para obtener la ID.
Como solución alternativa, puede crear un nuevo objeto invertido con Label => ID y usarlo para recuperar el Valor de región de la Región.
Entonces en código
assoc = {}main , repita todas las Regiones y complete su objeto invertido Tenga en cuenta que las etiquetas mostraban una fecha, por lo que usé split para eliminar información inútil que no permitiría una coincidencia directa en el nombre de la región.
for(const key in ds.__tree__.dimension.Region.category.label) { let label = ds.__tree__.dimension.Region.category.label[key].split('(')[0].trim() assoc[label] = key }assoc que acaba de completar y asigne su valor a d.regionValue if (d.value !== null) { d.regionValue = assoc[d.Region] return d; }Cuando emita su matriz, se mostrará así
0: ContentsCode: "Samlet inntekt, median (kr)" HusholdType: "Alle husholdninger" Region: "Halden" Tid: "2020" regionValue: "0101" value: 616000Aquí está el guión completo
var url = "https://data.ssb.no/api/v0/dataset/49678.json?lang=no"; assoc = {} function test() { return JSONstat(url).then(main); } async function main(j) { var ds = j.Dataset(0); for(const key in ds.__tree__.dimension.Region.category.label) { let label = ds.__tree__.dimension.Region.category.label[key].split('(')[0].trim() assoc[label] = key } let array = ds.toTable({ type: "arrobj" }, function (d) { if (d.value !== null) { d.regionValue = assoc[d.Region] return d; } }) console.log(array) } test()