J'ai un système de panier pour un site Web que j'ai créé. J'essaie actuellement de créer une offre de réduction sur la page de paiement. J'ai mis en place une instruction if mais cela ne fonctionne pas tout à fait. voir ci-dessous:

for (var i in cartArray) {
			if((cartArray[i].name=="Shampoo") &&
			(cartArray[i].name=="Drinks Can") &&
			(cartArray[i].name=="Small Brush"))
			{
			console.log("yes");
			} else {
			console.log("no");
			
			}
		}

J'obtiens « 5 non » dans la console, mais lorsque j'utilise l'opérateur OR, cela fonctionne. Mais cela ne suffira pas car j'ai besoin du code pour reconnaître les 3 simultanément afin que je puisse continuer avec la remise. Merci en avance.

Ps. voici à quoi ressemble la console dans son intégralité :

(5) [{…}, {…}, {…}, {…}, {…}]

0: {name: "500ml Conditioner", price: 1.5, count: 1, total: "1.50"}
1: {name: "1.5L Bleach", price: 2.5, count: 1, total: "2.50"}
2: {name: "Small Brush", price: 2.5, count: 1, total: "2.50"}
3: {name: "Shampoo", price: 4, count: 1, total: "4.00"}
4: {name: "Drinks Can", price: 1, count: 1, total: "1.00"}
0
risingmoon77 18 mars 2019 à 21:45

2 réponses

Meilleure réponse

Vous souhaitez vérifier les noms des articles au fur et à mesure que vous parcourez votre panier. Pour le moment, cependant, vous comparez les trois noms possibles au même élément (cartArray[i].name) à chaque passage. Ainsi, votre code ne retournera jamais « oui » car le même élément ne peut jamais avoir trois noms différents.

Une façon de résoudre ce problème peut être d'utiliser trois booléens qui commencent à false et qui sont définis sur true lorsqu'un nom correspond. Par exemple:

var shampoo = false;
var drinks = false;
var brush = false;

for (var i in cartArray) {
    switch (cartArray[i].name) {
        case "Shampoo":
            shampoo = true;
            break;
        case "Drinks Can":
            drinks = true;
            break;
        case "Small Brush":
            brush = true;
            break;
    }
    if (shampoo && drinks && brush) {
        console.log("yes");
        break;
    }
}
if (!shampoo || !drinks || !brush) {
    console.log("no");
}

Au lieu de tester sur chaque boucle, vous pouvez également tester uniquement lorsqu'un booléen est défini sur vrai, en vérifiant si les deux autres sont déjà vrais. Vous pouvez également utiliser if ... else if ... si vous le préférez à switch. De nombreuses façons d'accomplir ce que vous voulez.

1
B. Shefter 18 mars 2019 à 19:04

Eh bien, je ne suis pas sûr de ce que vous essayez d'atteindre, mais votre déclaration actuelle demande que le i-ème élément du tableau du panier soit nommé Shampooing, Drinks Can et Small Brush en même temps avec l'opérateur AND. Utilisez soit une instruction switch pour votre objectif, soit des if-s conséquents. Vous pourriez faire quelque chose comme :

for (var i in cartArray) 
{
     switch cartArray[i]:
        case "Shampoo":
             // do what you need
             break;
        case "Drinks Can"
             // do something
             break;
        default: console.log("no")    
}

Lisez la déclaration de changement ici

0
Kristóf Tóth 18 mars 2019 à 18:55