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

185
Vistas
Agrupar objetos en función de un valor similar en una matriz de objetos

Tengo una matriz de objetos que quiero agrupar/fusionar los objetos que tienen ramas y entornos similares y concatenar sus grupos al mismo tiempo.

 const data = [ { branch: "master", environment: "dev", pool: "6g", service: "amex", }, { branch: "master", environment: "dev", pool: "6g", service: "amex", }, { branch: "feature/rest", environment: "dev", pool: "2g", service: "amex", }, { branch: "master", environment: "dev", pool: "4g", service: "amex", }, { branch: "hotfix/23", environment: "test", pool: "9g", service: "amex", }, { branch: "hotfix/23", environment: "test", pool: "1g", service: "amex", }, ];

Quiero el resultado en el siguiente formato eliminando objetos duplicados también. Traté de reducirlo, pero como matriz reduce devuelve un solo objeto como resultado y los otros objetos se omiten de la respuesta, qué estructura de datos o forma puedo usar para lograr el ¿resultado?

 const result = [ { branch: "master", environment: "dev", pool: "6g, 4g", service: "amex", }, { branch: "feature/rest", environment: "dev", pool: "2g", service: "amex", }, { branch: "hotfix/23", environment: "test", pool: "9g,1g", service: "amex", }, ];
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

 const data = [{ branch: "master", environment: "dev", pool: "6g", service: "amex", }, { branch: "feature/rest", environment: "dev", pool: "2g", service: "amex", }, { branch: "master", environment: "dev", pool: "4g", service: "amex", }, { branch: "hotfix/23", environment: "test", pool: "9g", service: "amex", }, { branch: "hotfix/23", environment: "test", pool: "1g", service: "amex", }, ]; var cacheMix = {}; for (var i = 0; i < data.length; i++) { var item = data[i]; var compositeKey = item.environment + "~" + item.branch; if (cacheMix[compositeKey]) { cacheMix[compositeKey].pools[item.pool] = 1; } else { var pools = {}; pools[item.pool] = 1; //to avoid dublicate pools cacheMix[compositeKey] = { branch: item.branch, environment: item.environment, service: item.service, pools: pools } } } var result = []; for (var key in cacheMix) { var item = cacheMix[key]; result.push({ branch: item.branch, environment: item.environment, service: item.service, pool: Object.keys(item.pools).join(", ") }); } console.log(result);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Simplemente cree un diccionario a partir de ellos y complete los valores.

 const data=[{branch:"master",environment:"dev",pool:"6g",service:"amex"},{branch:"feature/rest",environment:"dev",pool:"2g",service:"amex"},{branch:"master",environment:"dev",pool:"4g",service:"amex"},{branch:"hotfix/23",environment:"test",pool:"9g",service:"amex"},{branch:"hotfix/23",environment:"test",pool:"1g",service:"amex"},] let x = {}; data.forEach(y => x[y.branch + "|" + y.environment] = y); var res = Object.values(x).map(y => Object.assign({}, y)).map(y => { y.pool = data.filter(d => d.branch == y.branch && d.environment == y.environment).map(x => x.pool).join(","); return y; })

Si no le importa la inmutabilidad (objetos originales en el cambio de datos), elimine Object.assign map y obtendrá los mismos resultados

about 4 years ago · Juan Pablo Isaza Denunciar

0

data.reduce((prev, curr) => { const container = prev.find( el => (el.branch === curr.branch) && (el.environment === curr.environment) ); if (container) { container.pool = container.pool + `,${curr.pool}` return prev; } else { return prev.concat({...curr}) } }, [])

pero sugeriría crear un objeto con la key s igual a los nombres de las ramas.

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