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

163
Visualizações
Reestructurar matriz basada en una clave particular juntos-javascript

Tengo una matriz de objetos así:

 const data = [ {category: {id: 1, name: 'beverage'}, title: 'Tea'}, {category: {id: 1, name: 'beverage'}, title: 'Coffee'}, {category: {id: 2, name: 'snacks'}, title: 'French fries'}, ];

Quiero el resultado así:

 const transformed = [ { category: "beverage", data: [{title:'coffee'},{title:'tea'}, ...] }, { category: "snacks", data: [{title:'french fries'},...] }, .. ]

lo que hice fue:

 let transformed = data?.map(function (obj) { var result = { category: obj.category.title, data: [], }; for (var key in obj) { if (obj.hasOwnProperty(key) && key === 'category') { result.values.push(obj); } } return result; });

Pero con este enfoque obtengo nombres de categoría duplicados para cada objeto en la matriz.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Puede agrupar por name de category y usar un objeto para obtener valores agrupados.

 const data = [{ category: { id: 1, name: 'beverage' }, title: 'Tea' }, { category: { id: 1, name: 'beverage' }, title: 'Coffee' }, { category: { id: 2, name: 'snacks' }, title: 'French fries' }], result = Object.values(data.reduce((r, { category: { name: category }, title }) => { (r[category] ??= { category, data: [] }).data.push({ title }); return r; }, {})); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Relatório

0

Como con todas las operaciones de agrupación, la clave es usar reduce para construir un nuevo objeto.

 const data = [ {category: {id: 1, name: 'beverage'}, title: 'Tea'}, {category: {id: 1, name: 'beverage'}, title: 'Coffee'}, {category: {id: 2, name: 'snacks'}, title: 'French fries'}, ]; const result = Object.values(data.reduce( (a,i) => { a[i.category.id] = a[i.category.id] || {category:i.category.name, data:[]}; a[i.category.id].data.push({title:i.title}); return a; },{})); console.log(result);

about 4 years ago · Juan Pablo Isaza Relatório

0

Mira esto

 const data = [ {category: {id: 1, name: 'beverage'}, title: 'Tea'}, {category: {id: 1, name: 'beverage'}, title: 'Coffee'}, {category: {id: 2, name: 'snacks'}, title: 'French fries'}, ]; const transform = (data) => { const grouped = data.reduce((acc, obj) => { const { category: { id, name }, title } = obj; acc[id] = (acc[id]) ? { ...acc[id], data: [...acc[id].data, { title }], } : { category: name, data: [{ title }] }; return acc; }, {}); return Object.values(grouped); }; console.dir(transform(data), {depth: null}); // [ // { category: 'beverage', data: [{ title: 'Tea' }, { title: 'Coffee' }] }, // { category: 'snacks', data: [{ title: 'French fries' }]} // ]
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