Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

163
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda