Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

121
Views
¿Cómo transformar el objeto Javascript en función de una de las columnas?

Realmente estoy luchando con la transformación de Objeto. Tengo una matriz de objetos y quiero transformarla en una entrada de gráfico multilínea de Highcharts.

  1. Para el eje x necesito un objeto de fechas únicas.
  2. Para el eje Y, necesito una serie de objetos, cada uno tendrá la misma cantidad de puntos que las fechas únicas del paso 1. Para una ID y una fecha, si los datos están disponibles, agregará ese valor, de lo contrario, será nulo.

Original:

 [{ "date": "1997-09-29", "Count": 100, "ID": "AB12-R" }, { "date": "1997-12-30", "Count": 104.7, "ID": "AB13-R" }, { "date": "1997-12-30", "Count": 1192, "ID": "BA12-R" }, { "date": "1998-03-30", "Count": 981, "ID": "BA12-R" }, { "date": "1998-06-01", "Count": 341, "ID": "BA12-R" } ]

Producción:

 [ { Identiy: 'AB12-R', data: [100, null, null, null] }, { Identiy: 'AB13-R', data: [null, 104.7, null, null] }, { Identiy: 'BA12-R', data: [null, 1192, 981, 341] } ]

Explicación:

En Original, tengo 4 fechas únicas, por lo tanto, la longitud de los datos para cada identidad es 4. Ahora, para cada fecha única, verificaré si hay alguna entrada en Original, si es así, la insertaré en datos si no es nula.

Mi código:

De alguna ayuda de, esto es lo que estaba intentando. Pero esto no es verificar las fechas únicas y solo crear la longitud del objeto de datos que es igual al número de objetos en el Original. Aquí está esa implementación https://jsfiddle.net/3u9penko/

 const data = [{"date":"1997-09-29","Count":100,"ID":"AB12-R"},{"date":"1997-12-30","Count":104.7,"ID":"AB13-R"},{"date":"1997-12-30","Count":1192,"ID":"BA12-R"},{"date":"1998-03-30","Count":981,"ID":"BA12-R"},{"date":"1998-06-01","Count":341,"ID":"BA12-R"}]; const hcData = []; data.forEach((d, i) => { const checkIfExist = hcData.find(data => data.id === d["ID"]) if (checkIfExist) { checkIfExist.data[i] = d["Count"]; } else { const initialData = [...Array(data.length)] initialData.fill(null, 0, data.length) initialData[i] = d["Count"]; hcData.push({ data: initialData, id: d["ID"] }) } }) console.log(hcData)

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Cree un mapa de fechas únicas para indexar usando un Set para obtener las fechas únicas y luego convertirlo en un mapa con la fecha como clave y el índice como valor.

Reduzca la matriz a un mapa usando la ID como clave e inicializando el valor con una matriz vacía, que tiene la longitud del tamaño del mapa de dates lleno con null . Agregue el valor del objeto actual a la matriz de nulos en el índice de la date en el mapa de dates .

Convierta el Mapa en una matriz de objetos usando Array.from() .

 const fn = arr => { // create a Map of uniqe dates with their index const dates = new Map(Array.from( new Set(arr.map(o => o.date)), (v, i) => [v, i] )) return Array.from( arr.reduce((acc, o, i) => { // if an ID doesn't exist on the Map init it with an empty array of null values (counts) if(!acc.has(o.ID)) acc.set(o.ID, new Array(dates.size).fill(null)) // add the current ID count to the array of counts acc.get(o.ID)[dates.get(o.date)] = o.Count return acc }, new Map), ([Identity, data]) => ({ Identity, data }) // convert to an array of objects ) } const arr = [{"date":"1997-09-29","Count":100,"ID":"AB12-R"},{"date":"1997-12-30","Count":104.7,"ID":"AB13-R"},{"date":"1997-12-30","Count":1192,"ID":"BA12-R"},{"date":"1998-03-30","Count":981,"ID":"BA12-R"},{"date":"1998-06-01","Count":341,"ID":"BA12-R"}] const result = fn(arr) console.log(result)

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!