J'ai du JavaScript que j'ai écrit à la rigueur, mais je pense qu'il pourrait être optimisé par quelqu'un de plus intelligent que moi. Ce code fonctionne sur des objets relativement petits, mais il court une bonne quantité de temps, il est donc utile de faire droit:Itérer les objets JavaScript imbriqués - Sale?
/**
* Determine the maximum quantity we can show (ever) for these size/color combos
*
* @return int=settings.limitedStockThreshold
*/
function getMaxDefaultQuantity() {
var max_default_quantity = 1;
if (inventory && inventory.sizes) {
sizecolor_combo_loop:
for (var key in inventory.sizes) {
if (inventory.sizes[key].combos) {
for (var key2 in inventory.sizes[key].combos) {
var sizecolor_combo = inventory.sizes[key].combos[key2];
if (isBackorderable(sizecolor_combo)) {
//if even one is backorderable, we can break out
max_default_quantity = settings.limitedStockThreshold;
break sizecolor_combo_loop;
} else {
//not backorderable, get largest quantity (sizecolor_combo or max_default_quantity)
var qoh = parseInt(sizecolor_combo.quantityOnHand || 1);
if (qoh > max_default_quantity) {
max_default_quantity = qoh;
};
};
};
};
};
};
return Math.min(max_default_quantity, settings.limitedStockThreshold);
};
inventaire En premier lieu, est un objet retourné par JSON. Il a une propriété inventory.sizes qui contiennent toutes les tailles disponibles pour un produit. Chaque taille a une propriété inventory.sizes.combos qui correspond à toutes les couleurs disponibles pour une taille. Chaque combo a également une propriété quantityOnHand qui indique la quantité disponible pour ce combo spécifique. (la structure JSON retournée ne peut pas être modifiée)
Ce que fait le code est de faire défiler chaque taille, puis les combos de chaque taille. Il vérifie ensuite si le combo taille-couleur est rechargeable (via une autre méthode). Si n'importe quel combo est backorderable, nous pouvons arrêter parce que la quantité par défaut est définie ailleurs. Si le combo n'est pas en stock, la valeur de max_default_quantity est la plus grande quantityOnHand que nous trouvons (avec un maximum de settings.limitedStockThreshold). Je n'aime vraiment pas les boucles imbriquées et ma gestion des valeurs mathématiques et par défaut me semble trop compliquée.
En outre, cette fonction entière est enveloppée dans un objet jQuery beaucoup plus grand si cela aide à le nettoyer.
FYI, vous n'avez pas besoin de points-virgules à la fin des blocs de code JavaScript. – Jacob
@Jacob J'oserais dire! Si j'écrivais cela, il n'y aurait pas un seul point-virgule * encombrant le code! –
J'ajoute des points-virgules car le code semble mieux compresser en utilisant JS-Minifier. C'est une habitude récente que j'ai ramassée. – Brandon0