&& оператор if в цикле for не дает правильного ответа - PullRequest
0 голосов
/ 18 марта 2019

У меня есть система корзины для сайта, который я сделал. В настоящее время я пытаюсь создать скидку на странице оформления заказа. Я составил заявление if, но оно не совсем работает. см. ниже:

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");
			
			}
		}

Я получаю «5 нет» в консоли, но когда я использую оператор ИЛИ, это работает. Но это не сработает, так как мне нужен код, чтобы распознать все 3 одновременно, чтобы я мог продолжить со скидкой. Заранее спасибо.

пс. Вот как выглядит консоль в полном объеме:

(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"}

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Вы хотите проверять названия товаров во время итерации по корзине.Однако сейчас вы проверяете все три возможных имени на один и тот же элемент (cartArray[i].name) на каждом проходе.Таким образом, ваш код никогда не вернет «да», потому что один и тот же элемент никогда не может иметь три разных имени.

Один из способов исправить это - использовать три логических значения, которые начинаются с false и устанавливаются в true, когда имя совпадает.Например:

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");
}

Вместо тестирования в каждом цикле вы также можете проверять только, когда логическое значение установлено в значение true, проверяя, являются ли два других значения истинными.Вы также можете использовать if ... else if ..., если предпочитаете switch.Множество способов сделать то, что вы хотите.

0 голосов
/ 18 марта 2019

Ну, я не уверен, чего вы пытаетесь достичь, но в вашем текущем заявлении запрашивается, чтобы i-й элемент массива корзины назывался Shampoo, Drinks Can и Small Brush одновременно с оператором AND. Либо используйте оператор switch для вашей цели, либо для последующих if-s. Вы можете сделать что-то вроде:

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")    
}

Читайте о переключателе здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...