Lo que buscas es el mínimo de los valores de stock[componente] / articulo[componente].
Código:
componentesEnStock = { pestillo: 213, puerta: 45, pata: 506, techo: 44 ... }
componentesParaRopero = { pestillo: 2, puerta: 2, pata: 4, techo: 1 }
funcion maximoArticulosConStockExistente( articulo, stock ) {
var maximoArticulos = 100000000;
for ( componente en articulo ) {
if (Redondeo(stock.componente / articulo.componente) < maximoArticulos) {
maximoArticulos = Redondeo(stock.componente / articulo.componente);
}
}
return maximoArticulos;
}
Con el ejemplo puesto esto haría:
1. Cojemos pestillo.
2. 213 / 2 -> 106
3. 106 < 10000000000, así que maximo = 106
4. Cojemos puerta
5. 45 / 2 -> 22
6. 22 es menor que 106, así que maximo = 22
7. Cojemos pata
8. 506/4 -> 126
9. 126 no es menor que 22, así que maximo sigue igual (22)
10. Cojemos techo
11. 44/1 -> 44
12. 44 no es menor que 22, así que maximo sigue igual (22)
13. Devolvemos maximo que es 22.
Como ves la idea es genérica y no importa cuántos ni cuales componentes tiene el artículo compuesto.
La única pega es la inicialización de maximoArticulos a 100000000. Sería un poco más elegante hacer que se inicialice con el primer valor (stock.componentes[0] / articulo.componentes[0]).
Si no te queda clara la explicación, pregunta.