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

80
Vistas
Agrupe una matriz de cadenas en un objeto que contiene matrices anidadas

Agradecería si alguien pudiera ayudarme a despegarme. Tengo una matriz que me gustaría describir usando un objeto. La matriz se ve así:

 const numberGroupArray = [ 'GROUP_A', 'ONE', 'TWO', 'BREAK', 'FOUR', 'GROUP_B', 'SIX', 'GROUP_C', 'EIGHT', 'BREAK', 'TEN', 'ELEVEN', 'GROUP_D', 'THIRTEEN', 'BREAK', 'FIFTEEN', 'BREAK', 'SEVENTEEN', 'EIGHTEEN', 'NINETEEN', ]

Y el objeto objetivo se ve así:

 const numberInGroup = { GROUP_A: [[1, 2], [4]], GROUP_B: [[6]], GROUP_C: [[8], [10, 11]], GROUP_D: [[13], [15], [17, 18, 19]], };

Donde cada número se refiere a un índice de la matriz anterior. numberInGroup.GROUP_A[0][1] se refiere a 'DOS' en la matriz anterior. De manera similar, numberInGroup.GROUP_D[2][1] se refiere a 'DIECISIETE'.

Intentando trabajar a través de la creación del objeto:

  1. 'GROUP_A' está establecido
  2. Se crea una matriz de trabajo y las cadenas 'UNO' y 'DOS' se envían a 'GRUPO_A'.
  3. Un 'BREAK' crea una nueva matriz de trabajo y 'FOUR' se envía a 'GROUP_A'.
  4. Se establece 'GROUP_B' y se repiten los pasos 2 y 3 para el resto de la matriz inicial.

Si necesita más información, feliz de proporcionar. Gracias de antemano.

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

0

Reduciría la matriz manteniendo un cierre sobre el último grupo.

 const data = ['GROUP_A', 'ONE', 'TWO', 'BREAK', 'FOUR', 'GROUP_B', 'SIX', 'GROUP_C', 'EIGHT', 'BREAK', 'TEN', 'ELEVEN', 'GROUP_D', 'THIRTEEN', 'BREAK', 'FIFTEEN', 'BREAK', 'SEVENTEEN', 'EIGHTEEN', 'NINETEEN'], result = data.reduce((group => (r, v) => { if (v.startsWith('GROUP_')) { group = r[v] = [[]]; return r; } if (v === 'BREAK') { group.push([]); return r; } group[group.length - 1].push(v); return r; })(), {}); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Simplemente recorra la matriz y genere el resultado a medida que avanza.

Básicamente, si ve GROUP_A (o lo que sea), crea una nueva propiedad en su resultado, con una matriz en blanco. Realice un seguimiento del grupo actual y en qué matriz está ingresando.

Luego, cuando presione BREAK , agregue una nueva matriz y cambie el contador.

Para los valores, use sus contadores y coloque el valor en el lugar correcto.

 const numberGroupArray = [ 'GROUP_A', 'ONE', 'TWO', 'BREAK', 'FOUR', 'GROUP_B', 'SIX', 'GROUP_C', 'EIGHT', 'BREAK', 'TEN', 'ELEVEN', 'GROUP_D', 'THIRTEEN', 'BREAK', 'FIFTEEN', 'BREAK', 'SEVENTEEN', 'EIGHTEEN', 'NINETEEN', ]; let numberInGroup = {}, // The result object currGroup, // Which group/property are we inside? currIdx, // Which sub-array are we pushing to? isGroup; // Do we need to change to a new group? numberGroupArray.forEach(val => { // Is this a new group? // If so, then make a new property and reset the counters if ((isGroup = val.match(/GROUP_[AZ]/))) { currGroup = isGroup[0]; currIdx = 0; numberInGroup[currGroup] = [[]]; } // BREAK means to push a new array into the current group else if (val === 'BREAK') { currIdx++; numberInGroup[currGroup].push([]); } // Otherwise push the value into the right spot in the final result else { numberInGroup[currGroup][currIdx].push(val); } }); console.log(numberInGroup);

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