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

169
Visualizações
¿Cómo agregar un par de valores clave para la misma clave en el mismo objeto en una matriz de objetos?

esta es mi matriz de objetos.

 const arr = [{"company":"Google","product":"A","sell":34},{"company":"Google","product":"B","sell":31},{"company":"Google","product":"C","sell":64},{"company":"Twitter","product":"A","sell":34},{"company":"Twitter","product":"B","sell":56},{"company":"Twitter","product":"C","sell":48}]

solución que he probado.

 const result = arr.reduce((acc, d) => { const found = acc.find(a => a.name === d.name); if (!found) { acc.push({ name: d.name, [d.value]: d.count }) } else { found.push({ [d.value]: d.count }); } return acc; }, []); console.log(result)

la salida esperada debería ser como la siguiente, pero algo está mal en el bloque else

 [{ company: "Google", A: 34, B:31, C:64 },{ company: "Twitter", A: 34, B:56, C:48 }]
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Tiene nombres de propiedad incorrectos en todo su código.

Y sí, el bloque else debería simplemente crear una nueva propiedad found[d.product] = d.sell;

 const arr = [{ "company": "Google", "product": "A", "sell": 34 }, { "company": "Google", "product": "B", "sell": 31 }, { "company": "Google", "product": "C", "sell": 64 }, { "company": "Twitter", "product": "A", "sell": 34 }, { "company": "Twitter", "product": "B", "sell": 56 }, { "company": "Twitter", "product": "C", "sell": 48 }] const result = arr.reduce((acc, d) => { const found = acc.find(a => a.name === d.company); if (!found) { acc.push({ name: d.company, [d.product]: d.sell }) } else { found[d.product] = d.sell; } return acc; }, []); console.log(result)

Aparte de que el algoritmo actual es O(n^2) , si desea que sea lineal, puede usar Map para almacenar datos para evitar búsquedas O(n)

 const arr = [{ "company": "Google", "product": "A", "sell": 34 }, { "company": "Google", "product": "B", "sell": 31 }, { "company": "Google", "product": "C", "sell": 64 }, { "company": "Twitter", "product": "A", "sell": 34 }, { "company": "Twitter", "product": "B", "sell": 56 }, { "company": "Twitter", "product": "C", "sell": 48 }] const result = [...arr.reduce((acc, d) => { const found = acc.get(d.company); // O(1) lookup if (found) { found[d.product] = d.sell } else { acc.set(d.company, { name: d.company, [d.product]: d.sell }) } return acc }, new Map).values()]; console.log(result)

about 4 years ago · Juan Pablo Isaza Relatório

0

 const arr = [{ "company": "Google", "product": "A", "sell": 34 }, { "company": "Google", "product": "B", "sell": 31 }, { "company": "Google", "product": "C", "sell": 64 }, { "company": "Twitter", "product": "A", "sell": 34 }, { "company": "Twitter", "product": "B", "sell": 56 }, { "company": "Twitter", "product": "C", "sell": 48 }] const res = [] arr.forEach(function (item) { const idxExist = res.findIndex(el => el.company === item.company) if (idxExist === -1) { res.push({"company": item['company'], [item['product']]: item['sell']}) } else { res[idxExist][item['product']] = item['sell'] } }) console.log(res)

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