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

181
Vistas
¿Cómo divido una matriz de objetos en múltiples matrices de objetos mientras filtro por duplicados?

Ok, orden alto lo sé.

Así que esta es mi situación, digamos que tengo la matriz de objetos a continuación

 var fullData = [{foo1: bar1, foo2: bar2, foo3: bar3}, {foo1: bar4, foo2: bar5, foo3: bar6}, {foo1: bar7, foo2: bar8, foo3: bar6}]

Me gustaría que esto se cambie a

[{name: bar1, label: bar1}, {name: bar4, label: bar4},{name: bar7, label: bar7}]

[{name: bar2, label: bar2}, {name: bar5, label: bar5},{name: bar8, label: bar8}]

[{name: bar3, label: bar3}, {name: bar6, label: bar6}]

Encontré lo siguiente de otro hilo que divide AoO en un objeto de Arrays.

 var result = res.body.reduce((r, o) => { Object.entries(o).forEach(([k, v]) => (r[k] = r[k] || []).push(v)); return r; }, Object.create(null));

Pero no filtra los duplicados y no formatea los datos de la forma en que etiqueté anteriormente, y no pude entender cómo funciona la función anterior. Para los duplicados, opté por usar _.uniq de lodash en cada elemento individual del result , pero me quedé atascado en el formato de 'nombre' y 'etiqueta', así que pensé en preguntar a programadores mucho más experimentados que yo si puede haber una manera. para incorporar todo esto en 1 función.

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

0

Simplemente puede agregar verificar si la matriz tiene el elemento antes de empujarlo a la matriz, cambiando esto:

 ([k, v]) => (r[k] = r[k] || []).push(v)

a esto:

 r[k] = r[k] || [] if(!r[k].includes(v)) r[k].push(v) 

 var fullData = [{foo1: 'bar1', foo2: 'bar2', foo3: 'bar3'}, {foo1: 'bar4', foo2: 'bar5', foo3: 'bar6'}, {foo1: 'bar7', foo2: 'bar8', foo3: 'bar6'}] var result = fullData.reduce((r, o) => { Object.entries(o).forEach(([k, v]) => { r[k] = r[k] || [] if(!r[k].includes(v)) r[k].push(v) }); return r; }, Object.create(null)); console.log(result)

Si desea aplanar el resultado para que sea una matriz de matrices, puede recorrer las entradas del resultado anterior e insertarlo en la nueva matriz.

 var fullData = [{foo1: 'bar1', foo2: 'bar2', foo3: 'bar3'}, {foo1: 'bar4', foo2: 'bar5', foo3: 'bar6'}, {foo1: 'bar7', foo2: 'bar8', foo3: 'bar6'}] var tmpResult = fullData.reduce((r, o) => { Object.entries(o).forEach(([k, v]) => { r[k] = r[k] || [] if(!r[k].includes(v)) r[k].push(v) }); return r; }, Object.create(null)); var result = []; Object.keys(tmpResult).forEach(k => { result.push( tmpResult[k].map(v => ({name: k, value: v})) ); }) console.log(result)

Sé que esto parece ineficiente, pero estoy seguro de que vale la pena intentarlo.

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