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

148
Visualizações
Convierta una matriz de objetos en una nueva matriz de objetos con claves en javscript

Tengo una matriz de objetos en el formato siguiente y me gustaría transformarla en una nueva matriz de objetos utilizando una propiedad como clave. La clave debe ser única. Ver la forma del objeto a continuación

 const mockedList = [ { email: 'aaa@example.com', id: '5052', name: 'Java', }, { email: 'bbb@example.com', id: '5053', name: 'Python', }, { email: 'aaa@example.com', id: '5054', name: 'C#', }, { email: 'bbb@example.com', id: '5055', name: 'Javascript', }, ];

Me gustaría transformar esto y obtener una matriz de objetos con claves y valores en este formato.

 [ { email: 'bbb@example.com', languages: [ { email: 'bbb@example.com', id: '5055', name: 'Javascript', }, { email: 'bbb@example.com', id: '5053', name: 'Python', }, ] }, { email: 'aaa@example.com', languages: [ { email: 'aaa@example.com', id: '5052', name: 'Java', }, { email: 'aaa@example.com', id: '5054', name: 'C#', }, ] } ]

He intentado usar map-reduce

 const result = mockedList.reduce((r, a) => { r[a.email] = r[a.email] || []; r[a.email].push(a); return r; }, Object.create(null));

Pero no obtuve la forma correcta de los datos.

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

0

Tu puedes hacer:

 const mockedList = [{email: 'aaa@example.com',id: '5052',name: 'Java',},{email: 'bbb@example.com',id: '5053',name: 'Python',},{email: 'aaa@example.com',id: '5054',name: 'C#',},{ email: 'bbb@example.com', id: '5055', name: 'Javascript' },] const mockedListHash = mockedList.reduce((a, c) => { a[c.email] = a[c.email] || { email: c.email, languages: [] } a[c.email].languages.push(c) return a }, {}) const result = Object.values(mockedListHash) console.log(result)

En caso de que desee limpiar los correos electrónicos repetidos dentro de los languages :

 const mockedList = [{email: 'aaa@example.com',id: '5052',name: 'Java',},{email: 'bbb@example.com',id: '5053',name: 'Python',},{email: 'aaa@example.com',id: '5054',name: 'C#',},{ email: 'bbb@example.com', id: '5055', name: 'Javascript' },] const mockedListHash = mockedList.reduce((a, c) => { a[c.email] = a[c.email] || { email: c.email, languages: [] } a[c.email].languages.push({ id: c.id, name: c.name, }) return a }, {}) const result = Object.values(mockedListHash) console.log(result)

about 4 years ago · Juan Pablo Isaza Relatório

0

Aquí hay otra opción con bucle for simple

 // Array const mockedList = [ { email: 'aaa@example.com', id: '5052', name: 'Java' }, { email: 'bbb@example.com', id: '5053', name: 'Python' }, { email: 'aaa@example.com', id: '5054', name: 'C#' }, { email: 'bbb@example.com', id: '5055', name: 'Javascript' } ]; // Set new object const newObj = {}; // Use regular loop for(const el of mockedList) { // Use email as key // If key already exist, add info // to it's languages array if(newObj[el.email]) newObj[el.email].languages.push(el); else newObj[el.email] = { email: el.email, languages: [el] } } // Test console.log(newObj); // If you need just array of objects, // without email as key, then transform it const newArr = Object.keys(newObj).map((key) => newObj[key]); // Test console.log(newArr);

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