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

121
Vistas
JS: busque y combine objetos similares en una matriz por clave

Tengo una matriz de datos. Necesito encontrar los objetos correspondientes por campo de code y fusionarlos. ¿Cómo se pueden hacer?

 const data = [ { id: 'K1', code: 'KBP', zone: 'zone-k1' }, { id: 'K2', code: 'KBP', zone: 'zone-k2' }, { id: 'H', code: 'HCL', zone: 'zone-h' } ] const expected = [ { id: ['K1', 'K2'], code: 'KBP', zone: ['zone-k1', 'zone-k2'] }, { id: 'H', code: 'HCL', zone: 'zone-h' } ]

Intenté usar lodash uniqBy y groupBy , pero no tuve éxito. Supongo que debe hacerse a través de reducir:

 const res = () => { const similar = data.reduce((item, acc) => { return item.id === acc.id; }) }
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Podría usar Array.prototype.reduce y agrupar los datos por code .

 const data = [ { gateId: 'K1', code: 'KBP', zone: 'zone-k1' }, { gateId: 'K2', code: 'KBP', zone: 'zone-k2' }, { gateId: 'H', code: 'HCL', zone: 'zone-h' } ]; const dataset = data.reduce((acc, curr) => { if (acc[curr.code] === undefined) { acc[curr.code] = { code: curr.code, id: [curr.gateId], zone: [curr.zone], } } else { acc[curr.code].id.push(curr.gateId) acc[curr.code].zone.push(curr.zone) } return acc; }, {}); const res = Object.values(dataset); console.log(res);
 .as-console-wrapper{ min-height: 100vh !important; top: 0}

Por más que puedas ver esta respuesta

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar Array.prototype.reduce y agrupar los objetos por su code .

Nota: Según el OP, para los códigos que solo tienen una identificación única, el campo de id necesita una cadena y no una matriz y esta respuesta se adhiere a eso.

 const data = [ { id: "K1", code: "KBP", zone: "zone-k1" }, { id: "K2", code: "KBP", zone: "zone-k2" }, { id: "K3", code: "KBP", zone: "zone-k3" }, { id: "H", code: "HCL", zone: "zone-h" }, ]; const output = Object.values( data.reduce((o, d) => { const temp = o[d.code]; if (temp) { if (Array.isArray(temp?.id)) { temp.id.push(d.id); temp.zone.push(d.zone); } else { temp.id = [temp.id, d.id]; temp.zone = [temp.zone, d.zone]; } } else { o[d.code] = d; } return o; }, {}) ); console.log(output);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede agrupar y tomar las propiedades deseadas para los grupos.

 const data = [{ id: 'K1', code: 'KBP', zone: 'zone-k1' }, { id: 'K2', code: 'KBP', zone: 'zone-k2' }, { id: 'H', code: 'HCL', zone: 'zone-h' }], result = _(data) .groupBy('code') .map((items, code) => ({ id: _.map(items, 'id'), code, zone: _.map(items, 'zone'), })) .value(); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

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