Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

74
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda