Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

96
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda