Lo que hace esta funcionalidad es que por cada prioridad reequilibrará el porcentaje (Participación) en partes iguales. El problema ocurre en casos impares, por ejemplo cuando hay 3 prioridades(Prioridad), debes dividir 100/3, lo que da como resultado 33 (y 33 + 33 + 33 = 99)
Que debo agregar a mi codigo, para que cuando el resultado de la division no sea 100, los numeros que faltan se sumen en la ultima posicion, completando el 100.
Problema de ejemplo 1: gif de ejemplo: la idea es que los últimos 33 que ves en el gif se transformen automáticamente en 34. Este es el código que tengo hasta ahora:
rebalance(){ this.beneficiarios = this.beneficiarios.sort((a, b) =>Number(a.Prioridad) - Number(b.Prioridad)).map((val, i, beneficiarios) => { const priorityLenght = this.beneficiarios.filter((a) => Number(a.Prioridad) == Number(val.Prioridad)).map((b) => Number(b.Participacion)).length const arrObj = { ...val, Participacion : 100 / priorityLenght } return arrObj; }) }Problema 2: En el gif anterior se puede ver que al apretar el boton se hizo el rebalanceo para todas las prioridades (Prioridad), me gustaria que fuera solo para las que tienen un 0 en porcentaje (Participacion)
Estoy bastante seguro de que ambos problemas se pueden resolver agregando un par de líneas de código a la función que puse arriba, pero me falta experiencia para saber qué hacer.
Aquí un StackBlizz del proyecto: https://stackblitz.com/edit/create-a-basic-angular-component-v8k1hs?file=src/app/example/user.component.ts
Arreglé tu algoritmo. Realmente solo necesitaba un enfoque ligeramente diferente. Lo cambié para usar Math.floor() para la participación y luego obtuve la diferencia (100 % de longitud) necesaria para hacer que el valor sea 100 % y lo agregué al último valor. Aquí está el stackblitz actualizado.
PD: nunca realice llamadas de método en la plantilla debido a la sobrecarga que esto agrega cada vez que se ejecuta la detección de cambios; en su lugar, use canalizaciones puras o calcule su valor para la presentación cuando cambien los datos. Se estaba llamando a un método de formato decimal que eliminé.