Me gustaría crear una matriz que indique la cantidad de veces que la cantidad aprobada entra en la cantidad original (vqty) y la cantidad aprobada asociada con ella (aqty). La cantidad original disminuye después de cada iteración.
Por ejemplo - var ApprovedQty = [680,120,450,40]; var Cantidad original = 10000;
var NewArray = [(vqty:aqty),(vqty:aqty),(vqty:aqty),(vqty:aqty)]
use algún tipo de bucle for para generar NewArray ordenando la matriz original en orden descendente y dividiendo la cantidad original por el valor de la matriz.
idealmente es 10000/680 = 14.07 por lo que el primer valor en NewArray es (14:680). Luego, la cantidad original se convierte en 10000 - (680x14) = 480
entonces 480/450 = 1.06 entonces el segundo valor en NewArray es (1:450). Entonces la cantidad original se convierte en 480 - (450 x1) = 30
entonces 30/120 = .25 .. dado que 120 no es el último valor disponible en la matriz original, el valor en la nueva matriz es (0:120) y la cantidad original permanece en 30
entonces 30/40 = 0,75... dado que 40 es el último valor de la matriz, el valor de la nueva matriz es (1:40)
entonces el nuevo arreglo es [(14:680),(1:450),(0:120),(1:40)]
Puede mapear las partes deseadas usando un cierre que es una función que devuelve una función y mantiene un total variable.
El código verifica si se alcanza el último índice y toma ceil como método, de lo contrario, floor y lo llama más tarde con la división por el valor de la matriz (previamente ordenada).
Luego, el total obtiene el resto y las parts se devuelven como resultado.
const getParts = total => (value, i, { length }) => { const method = i + 1 === length ? 'ceil' : 'floor', parts = Math[method](total / value); total %= value; return parts; }, values = [680, 450, 120, 40], result = values.map(getParts(10000)); console.log(...result);