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

90
Vistas
Cree una matriz de propiedades de objeto para cada elemento que tenga la misma clave

Estoy fusionando dos objetos para crear un objeto de filtro. Sin embargo, quiero agrupar los valores de propiedad de los objetos fusionados donde las claves son las mismas.

Asi que...

 [{category: 'furniture'}, {category: 'mirrors'}, {availability: 'in_stock'}]

se convierte

 [{category: ['furniture', 'mirrors']}, {availability: 'in_stock'}]

¿algunas ideas?

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

0

Con lodash, fusiona toda la matriz en un nuevo objeto extendiéndose en _.mergeWith() . El personalizador debe usar matrices vacías como valores predeterminados para los valores actuales y concatenar los valores. Use _.map() para volver a convertir a una matriz.

 const data = [{category: 'furniture'}, {category: 'mirrors'}, {availability: 'in_stock'}]; const result = _.map( _.mergeWith({}, ...data, (a = [], b = [], key) => a.concat(b)), (val, key) => ({ [key]: val }) ) console.log(result)
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

Usando Vanilla JS, reduzca la matriz a un Mapa usando las claves de los objetos como las claves del Mapa, con una matriz vacía como valor, e inserte los valores de los objetos en las matrices. Use Array.from() para convertir el mapa en una matriz.

 const data = [{category: 'furniture'}, {category: 'mirrors'}, {availability: 'in_stock'}]; const result = Array.from( data.reduce((acc, obj) => { Object.entries(obj) .forEach(([key, val]) => { if(!acc.has(key)) acc.set(key, []) acc.get(key).push(val) }) return acc }, new Map()), ([key, val]) => ({ [key]: val }) ) console.log(result)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puedes usar reduce así:

 const data = [ { category: 'furniture' }, { category: 'mirrors' }, { availability: 'in_stock' } ]; const result = data.reduce( (a, x) => { const key = Object.keys(x)[0]; // find the key of the current object if (!a.tmp[key]) { // if the current key doesn't exist in the lookup object (tmp) yet ... a.tmp[key] = []; // create an empty array in the lookup object for the current key a.result.push({ [key]: a.tmp[key] }); // push the current object to the result } a.tmp[key].push(x[key]); // push the current value to the array return a; }, { result: [], tmp: {} }, ).result; console.log(result);

Estoy seguro de que hay formas más fáciles de lograr esto, pero eso es lo mejor que se me ocurre en este momento.

about 4 years ago · Juan Pablo Isaza Denunciar

0

también podemos lograr esto usando forEach loop :

 const input = [{category: 'furniture'}, {category: 'mirrors'}, {availability: 'in_stock'}]; const resultObj = {}; const resultArr = []; input.forEach((obj) => { resultObj[Object.keys(obj)[0]] = []; }) input.forEach((obj) => { resultObj[Object.keys(obj)[0]].push(obj[Object.keys(obj)[0]]); resultArr.push(resultObj); }) console.log([...new Set(resultArr)]);

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