Estoy escribiendo una función que divide el cambio en denominaciones y devuelve el registro actualizado después de que se haya dado el cambio. Hasta ahora funciona, pero solo si la caja registradora tiene suficiente dinero en las respectivas denominaciones. Si el cambio es [ 10, 4, 0.5, 0.05 ] como en este caso y no hay billetes de 10 dólares en el registro, por ejemplo, el ciclo debe pasar a billetes de 5 dólares y verificar si se puede dar cambio de esos y así en. Pero lo que hace es saltar directamente a los billetes de 1 dólar. ¿Que me estoy perdiendo aqui? En cuanto a los índices, están precalculados en mi función mayor, por lo que 10 comienza a recorrer el ciclo en el índice 2 , ya que todas las denominaciones anteriores son mayores que 10 , 4 comienza a realizar un ciclo en el índice 4 , ya que ese es el índice de billetes de 1 dólar en la caja registradora, etc.
let change = [ 10, 4, 0.5, 0.05 ] let denomin = [ 100, 20, 10, 5, 1, 0.25, 0.1, 0.05, 0.01 ] let register = [ 100, 60, 0, 55, 90, 4.25, 3.1, 2.05, 1.01 ] let idx = [ 2, 4, 5, 7 ] function test(ch, reg, idx) { for (let x of ch) { for (let i = idx[ch.indexOf(x)]; i < reg.length; i++) { if (reg[i] - x >= 0) { reg[i] -= x break; } else if (reg[i] - x < 0) { i++ } } } return reg = reg.map(a => Number(a.toFixed(2))) } console.log(test(change, register, idx))