• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

114
Views
cambiar la estructura de la matriz de objetos al formato deseado

Estoy creando una API y obteniendo los datos de mi base de datos en el formato dado.
No habrá repeticiones como {country: 'India', count: 2, status: 'Active'},{country: 'India', count: 1, status: 'Active'}

 const dataFromDB = [ {country: 'India', count: 2, status: 'Active'}, {country: 'USA', count: 3, status: 'Recovered'}, {country: 'India', count: 2, status: 'Recovered'}, {country: 'Russia', count: 1, status: 'Active'}, {country: 'India', count: 1, status: 'Dead'}, {country: 'Brazil', count: 1, status: 'Active'}, {country: 'Canada', count: 1, status: 'Dead'}, {country: 'USA', count: 1, status: 'Active'} ]

Pero quiero convertir mis datos a un formato diferente antes de enviarlos.

 const formatIWant = { Brazil: { active: 1, dead: 0, recovered: 0 }, Canada: { active: 0, dead: 1, recovered: 0 }, India: { active: 2, dead: 1, recovered: 2 }, Russia: { active: 1, dead: 0, recovered: 0 }, USA: { active: 1, dead: 0, recovered: 3 } }

¿Cómo abordo este problema?

almost 3 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puedes usar .reduce()

 const dataFromDB = [ {country: 'India', count: 2, status: 'Active'}, {country: 'USA', count: 3, status: 'Recovered'}, {country: 'India', count: 2, status: 'Recovered'}, {country: 'Russia', count: 1, status: 'Active'}, {country: 'India', count: 1, status: 'Dead'}, {country: 'Brazil', count: 1, status: 'Active'}, {country: 'Canada', count: 1, status: 'Dead'}, {country: 'USA', count: 1, status: 'Active'} ]; const defaultStatus = dataFromDB.reduce((acc, {status}) => acc.hasOwnProperty(status.toLowerCase()) ? acc : {...acc, [status.toLowerCase()]: 0} , {}); const result = dataFromDB.reduce((acc, value)=> { const country = value.country.toLowerCase(); const status = value.status.toLowerCase(); return { ...acc, [country]: { ...defaultStatus, ...acc[country], [status]: value.count } } }, {}); console.log(result);

almost 3 years ago · Juan Pablo Isaza Report

0

Para convertir los datos al formato deseado, podemos crear un objeto, formatIWant , luego iterar a través de dataFromDB , actualizando ese objeto con los datos relevantes a medida que avanzamos.

Aquí hay una implementación simple que producirá el resultado que está buscando.

 const dataFromDB = [ {country: 'India', count: 2, status: 'Active'}, {country: 'USA', count: 3, status: 'Recovered'}, {country: 'India', count: 2, status: 'Recovered'}, {country: 'Russia', count: 1, status: 'Active'}, {country: 'India', count: 1, status: 'Dead'}, {country: 'Brazil', count: 1, status: 'Active'}, {country: 'Canada', count: 1, status: 'Dead'}, {country: 'USA', count: 1, status: 'Active'} ] const formatIWant = {}; for(let i=0; i<dataFromDB.length; i++){ let country = dataFromDB[i].country; let count = dataFromDB[i].count; let status = dataFromDB[i].status; // add entry for country if not found !formatIWant[country] ? formatIWant[country] = { active: 0, dead: 0, recovered: 0 } : ''; // update country with data formatIWant[country][status.toLowerCase()] = count; } console.log(formatIWant);

almost 3 years ago · Juan Pablo Isaza Report

0

Simplemente recorra la array de objects simples y cree un nuevo objeto con diferentes claves usando cada dato. esto por ejemplo

 const reformat = (dataFromDB) => { const formatted = {}; for (const data of dataFromDB) { formatted[data.country] = { recovered: 0, active: 0, dead: 0, ...formatted[data.country], [data.status.toLowerCase()]: data.count, }; } return formatted; }; console.log( reformat([ { country: 'India', count: 2, status: 'Active' }, { country: 'USA', count: 3, status: 'Recovered' }, { country: 'India', count: 2, status: 'Recovered' }, { country: 'Russia', count: 1, status: 'Active' }, { country: 'India', count: 1, status: 'Dead' }, { country: 'Brazil', count: 1, status: 'Active' }, { country: 'Canada', count: 1, status: 'Dead' }, { country: 'USA', count: 1, status: 'Active' }, ]) );

almost 3 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 Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error