如果具有多个条件的语句不起作用

If statement with multiple conditions not working

我有一个这样的 forloop:

for (var i = 0; i < this.bucket_names.length; i++) { 
       if(this.bucket_names[i].criterium){
            bucketName = this.bucket_names[i].criterium;
        } else {
            bucketName = this.bucket_names[i];
        }


        console.log(bucketName, i, bucketName !== 'match', bucketName !== 'test');

        if (!selectedFilterDict && (bucketName !== "match" || bucketName !== "test")) {
            rawOptionData[key] = {
                terms: terms
            }
        } else if (bucketName !== "match" || bucketName !== "test"){}
}

我使用 if 语句检查字符串 match, test 上的 bucketNames,但是这个

if (!selectedFilterDict && (bucketName !== "match" || bucketName !== "test")) {}

不起作用,因为在 && 之后条件始终为真,我如何组合这些 bucketNames 让这个 if 语句起作用?

(bucketName !== "match" || bucketName !== "test") 将始终 return 为真,因为 bucketName 不能同时是 "match""test"

假设 bucketName"match",第一个检查 bucketName !== "match" 将 return 为假,所以我们转到第二个检查 bucketName !== "test"。由于 bucketName 已经是 "match" 这将 return 为真。如果我们将 bucketName 声明为 "test".

,则相同

如果您想检查 bucketName 是否不是 "test""match",请将您的 if 语句更改为 (bucketName !== "match" && bucketName !== "test")

正如其他人已经解释的那样,一个变量不能同时与两个不同的值不同,所以:

bucketName !== "match" || bucketName !== "test"

将始终计算为 true,因为两个条件之一始终为 true

如果要检查 bucketName 是否与给定集合中的任何值匹配,可以使用 Array.prototype.includes():

const whiteListed = ['match', 'test'].includes(bucketName);

if (!selectedFilterDict && !whiteListed) {
    ...
} else if (whiteListed) {
    ...
}

如果你想在不使用 includes 的情况下使用相同的逻辑,你还可以使用:

if (!selectedFilterDict && bucketName !== "match" && bucketName !== "test") {
    ...
}

或:

if (!selectedFilterDict && !(bucketName === "match" && bucketName === "test")) {
    ...
}

我猜你已经知道 bucketName 不能同时是 "match" 和 "test"。因此,定义一个 bucketName 数组并使用 ! includes() 检查您的条件。

const bucketNames = ["match", "test", "exists"];
let bucketName = 'tst';
let test= !bucketNames.includes(bucketName);
console.log(test)

对于您的代码库,如下所示,

if (!selectedFilterDict && !bucket_names.includes(bucketName)) {
      rawOptionData[key] = {
      terms: terms
    }
 }

尝试使用

if (!selectedFilterDict && !(bucketName == "match" || bucketName == "test")) {}