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

101
Visualizações
Crear un método de reducción que pueda manejar cualquier cantidad de objetos con ID únicos

Estoy tratando de usar el método de reducción para clasificar una serie de objetos. Mi objetivo es crear un método de reducción que pueda manejar cualquier cantidad de objetos (con identificadores de eventos únicos). La salida deseada tendría este formato pero con la capacidad de manejar más de cinco ID de evento únicos

[Salida deseada]

 (5) [{…}, {…}, {…}, {…}, {…}] 0: eventId: "12345" total: Array(3) 0: {total: 123} 1: {total: 45} 2: {total: 123} length: 3 1: {total: Array(3), eventId: '12347'} 2: {total: Array(3), eventId: '12349'} 3: {total: Array(3), eventId: '12348'} 4: {total: Array(3), eventId: '12346'}

Para obtener el resultado anterior, utilicé este método de reducción.

[Método de reducción]

 const sortedSalesData = salesData.reduce((acc, obj) => { for ( let i = 0; i<salesData.length; i++) { if (obj.eventId === salesData[i].eventId ) { acc[i].eventId = salesData[i].eventId; acc[i].total = [...acc[i].total, {total: obj.total}]; return acc; } }; },[{total:[]},{total:[]},{total:[]},{total:[]},{total:[]}]);

Pero no estoy seguro de cómo configurarlo para manejar más de esos cinco identificadores de eventos únicos. A continuación se muestra la matriz original como referencia.

[Matriz original]

 const salesData = [ { eventId: '12345', total: 123 }, { eventId: '12347', total: 45 }, { eventId: '12349', total: 78 }, { eventId: '12348', total: 123 }, { eventId: '12346', total: 45 }, { eventId: '12349', total: 78 }, { eventId: '12347', total: 123 }, { eventId: '12345', total: 45 }, { eventId: '12348', total: 78 }, { eventId: '12345', total: 123 }, { eventId: '12347', total: 45 }, { eventId: '12346', total: 78 }, { eventId: '12349', total: 123 }, { eventId: '12348', total: 45 }, { eventId: '12346', total: 78 }, ];

El problema es llevarlo a un lugar donde puede manejar cualquier cantidad de eventos únicos sin tener que agregar un {total:[]} adicional al final del método.

about 4 years ago · Santiago Gelvez
2 Respostas
Responde à pergunta

0

Desea iterar sobre la matriz inicial (obj), insertar el elemento iterado en una nueva matriz (acc) si eventId aún no existe en dicha matriz, cuando existe (accObj), desea empujar el objeto total del elemento actual (obj) en la matriz total del nuevo elemento (accObj)?

Creo que esto hace lo que necesitas:

 let array = [ { eventId: '12345', total: 123 }, { eventId: '12347', total: 45 }, { eventId: '12349', total: 78 }, { eventId: '12348', total: 123 }, { eventId: '12346', total: 45 }, { eventId: '12349', total: 78 }, { eventId: '12347', total: 123 }, { eventId: '12345', total: 45 }, { eventId: '12348', total: 78 }, { eventId: '12345', total: 123 }, { eventId: '12347', total: 45 }, { eventId: '12346', total: 78 }, { eventId: '12349', total: 123 }, { eventId: '12348', total: 45 }, { eventId: '12346', total: 78 }, ] let reducedArray = array.reduce((acc, obj) => { console.log("Element " + JSON.stringify(obj)); let accObj = acc.find(accObj => accObj.eventId === obj.eventId); if(accObj != undefined) { console.log("Found element: " + JSON.stringify(accObj) + ".") console.log("Pushing "+ obj.total +" to total.") accObj.total.push(obj.total); } else { accObj = { eventId: obj.eventId, total: [obj.total] }; console.log("Pushing new element to list: " + JSON.stringify(accObj)); acc.push(accObj); } return acc; }, []); console.log(JSON.stringify(reducedArray));

El truco está en el método de find , estoy buscando en mi propia lista reductora para ver si ya tiene un elemento que comparte eventId con la matriz anterior.

about 4 years ago · Santiago Gelvez Relatório

0

No soy fanático de .reduce, así que aquí hay una solución fácil sin él.

 const salesData = [ { eventId: '12345', total: 123 }, { eventId: '12347', total: 45 }, { eventId: '12349', total: 78 }, { eventId: '12348', total: 123 }, { eventId: '12346', total: 45 }, { eventId: '12349', total: 78 }, { eventId: '12347', total: 123 }, { eventId: '12345', total: 45 }, { eventId: '12348', total: 78 }, { eventId: '12345', total: 123 }, { eventId: '12347', total: 45 }, { eventId: '12346', total: 78 }, { eventId: '12349', total: 123 }, { eventId: '12348', total: 45 }, { eventId: '12346', total: 78 }, ] let reduced = {} salesData.forEach(elem=> { if(reduced[elem.eventId] !== undefined){ reduced[elem.eventId].push(elem.total) } else { reduced[elem.eventId] = [elem.total] } }) reduced = Object.keys(reduced).map(elem => { return({eventId: elem, total:reduced[elem]}) }) console.log(reduced)

about 4 years ago · Santiago Gelvez 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