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

72
Visualizações
Combinar elementos duplicados y sumar la cantidad

Tengo un objeto de matriz con ingresos, para cualquier ingreso duplicado quiero tener un solo registro que tenga una suma de todos los duplicados.

 This the array object const incomes = [ { incomeType: 'DIVIDEND', incomeSubType: 'RECEIPT', payerName: 'Employer', expiryDate: '2022-03-10', regularAmountCalculated: { value: 2500, currencyCode: 'AUD' }, irregularAmountCalculated: null, bonusCalculated: { value: 200, currencyCode: 'AUD' } }, { incomeType: 'DIVIDEND', incomeSubType: 'RECEIPT', payerName: 'Employer', expiryDate: '2022-03-10', regularAmountCalculated: { value: 2500, currencyCode: 'AUD' }, irregularAmountCalculated: null, bonusCalculated: { value: 200, currencyCode: 'AUD' } } ];

Espero que la salida tenga un registro único para Dividendo y una cantidad calculada como 5000.

 Expected output const incomes = [ { incomeType: 'DIVIDEND', incomeSubType: 'RECEIPT', payerName: 'Employer 1', expiryDate: '2022-03-10', regularAmountCalculated: { value: 5000, currencyCode: 'AUD' }, irregularAmountCalculated: null, bonusCalculated: { value: 200, currencyCode: 'AUD' } }, ];

He escrito:

 const totals:any = []; statementOfIncomes.forEach(x => { const obj = totals.find(o => o.incomeType === 'DIVIDEND'); if (obj) { obj.regularAmountCalculated.value = obj.regularAmountCalculated.value + x.regularAmountCalculated?.value; } else { totals.push(x); } });

el error que me sale es

ERROR TypeError: no se puede asignar a la propiedad de solo lectura 'valor' del objeto '[objeto Objeto]'

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

0

Sugeriría usar un Map para almacenar todos los ingresos únicos. Debe recorrer sus ingresos, verificar si el mapa ya tiene una entrada basada en el tipo de incomeType . De lo contrario, agréguelo al mapa; de lo contrario, obtenga el valor existente y agréguele el regularAmount . Por último, debe volver a convertir su mapa en un Array . Esto tiene un tiempo de ejecución de O(2n) en lugar de O(n^2) como se indicó en su primer enfoque.

 const map = new Map(); incomes.forEach((income) => { if (!map.has(income.incomeType)) { map.set(income.incomeType, income); } else { const existingIncome = map.get(income.incomeType); existingIncome.regularAmountCalculated.value += income.regularAmountCalculated.value; map.set(income.incomeType, existingIncome); } }); const uniqueIncomes = Array.from(map, ([_key, value]) => value); // [ // { // incomeType: 'DIVIDEND', // incomeSubType: 'RECEIPT', // payerName: 'Employer', // expiryDate: '2022-03-10', // regularAmountCalculated: { value: 5000, currencyCode: 'AUD' }, // irregularAmountCalculated: null, // bonusCalculated: { value: 200, currencyCode: 'AUD' }, // }, // ];
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