&&运算符中带for循环的if语句未给出正确答案

时间:2019-03-18 18:45:04

标签: javascript html arrays for-loop if-statement

我为自己创建的网站提供购物车系统。我目前正在尝试在结帐页面上创建折扣交易。我已经整理了一个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 no”,但是当我使用OR运算符时,它可以工作。但这不会做,因为我需要代码同时识别所有3个代码,因此我可以继续进行折扣。先感谢您。

ps。以下是控制台的完整外观:

(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 个答案:

答案 0 :(得分:1)

您要在遍历购物车时检查商品名称。不过,现在,您要在每次通过时针对同一项目(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时进行测试,以检查其他两个布尔值是否已经为true。如果您更喜欢if ... else if ...,也可以使用switch。有很多方法可以实现您想要的。

答案 1 :(得分:0)

好吧,我不确定您要实现的目标,但是您当前的语句要求与AND运算符同时将购物车数组中的第i个项目分别命名为Shampoo,Drinks Can和Small Brush。出于您的目的使用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")    
}

了解switch语句here