Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

164
Vistas
¿Cómo simplificar una matriz de objetos con nombres de claves dinámicas y una matriz anidada en un formato más simple?

Estoy tratando de transformar una matriz de objectst con claves: name y winRatio en otra matriz de objetos con una clave de cada nombre y valor únicos de un elemento en la matriz winRatio.

El propósito de este problema es transformar los datos entrantes y reformatearlos en una solución de realización de gráficos (Recharts, si está interesado)

Aporte

 const data = [ { name: 'Tyler', winRatio: [1, 0.5, 0.6666666666666666], }, { name: 'Lizzie', winRatio: [0, 0.5, 0.3333333333333333], }, ];

Producción

 const formatted = [ { index: 0, Tyler: 1, Lizzie: 0, }, { index: 1, Tyler: 0.5, Lizzie: 0.5, }, { index: 2, Tyler: 0.6666, Lizzie: .333, }, ];

Pensé en usar map y reducir las funciones de matriz, pero parece que no puedo entender eso.

Nota Además, cada objeto en la salida debe tener un valor de índice asociado con el objeto que se incrementa en uno.

Nota La longitud de la matriz de salida debe ser igual a la longitud más larga de cualquier matriz winRatio. Por ejemplo, si winRatio para 'Tyler' tiene 20 elementos, la matriz de salida debería tener 20 objetos.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Aquí hay una forma en que podría usar un reductor para hacerlo. Recorre la matriz de datos, tomando cada objeto de los jugadores y combinándolo en la matriz final en el formato que solicitó.

 const reducer = (previousValue, currentValue,index) => { let current = {} currentValue.winRatio.forEach( (x, index) => { current = previousValue[index] ?? { index }; current[currentValue.name] = x previousValue[index] = current }) return previousValue } data.reduce(reducer, [])

En cuanto a sus dos notas, la salida es una matriz, por lo que debe conocer su índice, pero podría agregar una línea al bloque forEach en este ejemplo agregando un par de clave/valor de índice si aún no existe uno mientras recorre. Para su segunda nota, no estoy seguro de cómo averiguarlo sin solo ordenar la matriz (o revisarla y anotar la longitud más larga de winRatio), así que supongo que podría hacer eso.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Un uso bastante sencillo de Object .fromEntries podría ayudar:

 const format = (xs) => Array .from ({length: Math .max (...xs .map ((x) => x .winRatio .length))}, (_, i) => Object .fromEntries ([ ['index', i], ... data .filter (({winRatio}) => winRatio .length > i) .map (({name, winRatio}) => [name, winRatio [i]]) ]) ) const data = [{name: 'Tyler', winRatio: [1, 0.5, 0.6666666666666666]}, {name: 'Lizzie', winRatio: [0, 0.5, 0.3333333333333333]}]; console .log (format (data))
 .as-console-wrapper {max-height: 100% !important; top: 0}

Calculamos la longitud de la matriz winRatio más larga, creamos una nueva matriz de esa longitud y luego, para cada índice en la nueva matriz, creamos un objeto usando Object .fromEntries en una matriz que incluye una referencia a ese índice y el name y nth winRatio para cada entrada que tiene uno en ese índice.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda