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

143
Vistas
Fusionar condicionalmente una matriz de objetos

Estoy buscando una forma elegante (preferiblemente inmutable, lodash - ok) para compactar condicionalmente una matriz. Quiero verificar los duplicados de la combinación de los valores de la section y path , y agregar las ids de esos duplicados. tan dado

 const arrayToBeCompacted = [ { section: "Section name 1", path: ["segment1", "segment2"], ids: ["id1"] }, { section: "Section name 1", path: ["segment1", "segment2"], ids: ["id2"] }, { section: "Section name2", path: ["segment1", "segment2"], ids: ["id3"] }, { section: "Another section", path: ["segment1", "segment2"], ids: ["id4"] }, { section: "Another section", path: ["segment1", "segment2"], ids: ["id5"] }, ]

Como resultado me gustaría

 const resultingArray = [ { section: "Section name 1", path: ["segment1", "segment2"], ids: ["id1", "id2"] }, { section: "Section name 2", path: ["segment1", "segment2"], ids: ["id3"] }, { section: "Another section", path: ["segment1", "segment2"], ids: ["id4", "id5"] }, ]

Parece que lodash.uniq(By, With) y lodash.union(By, With) no son exactamente lo que estoy buscando.

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Puedes hacerlo con reducir

 const arrayToBeCompacted = [ { section: "Section name 1", path: ["segment1", "segment2"], ids: ["id1"] }, { section: "Section name 1", path: ["segment1", "segment2"], ids: ["id2"] }, { section: "Section name2", path: ["segment1", "segment2"], ids: ["id3"] }, { section: "Another section", path: ["segment1", "segment2"], ids: ["id4"] }, { section: "Another section", path: ["segment1", "segment2"], ids: ["id5"] }, ] const compacted = Object.values(arrayToBeCompacted.reduce((res, {section, path, ids}) => { const key = section + path.join('|') const existing = res[key] || {ids: [], section, path} existing.ids = [...existing.ids, ...ids] res[key] = existing return res }, {})) console.log(compacted)

about 4 years ago · Santiago Trujillo Denunciar

0

A continuación se muestra una forma posible de lograr el objetivo.

Fragmento de código

 // method to compact array of objects const compactArr = arr => ( Object.values( // extract values from intermediate result-obj arr.reduce( // iterate over the array using "reduce" (acc, itm) => { // "acc" is the accumuator/aggregator const {section, ids, path} = itm; // de-structure to get props // construct uniq-key using "section" and "path" const uniqKey = `${section}-${path.join('-')}`; acc[uniqKey] = { ...(acc[uniqKey] || {}), section, path, // if "section" already exists, concat "ids" ids: (acc[uniqKey]?.ids ?? []).concat(ids) } return acc; }, {} // initial value of "acc" is empty-object {} ) ) // implicit return from method ); const arrayToBeCompacted = [{ section: "Section name 1", path: ["segment1", "segment2"], ids: ["id1"] }, { section: "Section name 1", path: ["segment1", "segment2"], ids: ["id2"] }, { section: "Section name2", path: ["segment1", "segment2"], ids: ["id3"] }, { section: "Another section", path: ["segment1", "segment2"], ids: ["id4"] }, { section: "Another section", path: ["segment1", "segment2"], ids: ["id5"] }, ]; console.log('compacted array: ', compactArr(arrayToBeCompacted));
 .as-console-wrapper { max-height: 100% !important; top: 0 }

Explicación

Comentarios en línea agregados en el fragmento anterior.

about 4 years ago · Santiago Trujillo 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