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

时间:2018-10-29 14:59:53

标签: javascript typescript angular5

我有一个这样的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语句检查字符串bucketNames上的match, test的情况

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

不起作用是因为在&&之后条件始终为真,如果语句可以工作,如何将这些bucketNames组合起来使之生效?

4 个答案:

答案 0 :(得分:1)

尝试使用

 var treeWalker =  window.frames[0].document.createTreeWalker(
    window.frames[0].document.body,
    NodeFilter.SHOW_ALL,
    { acceptNode: acceptTextNode });

答案 1 :(得分:0)

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

我们假设bucketName"match",第一张支票bucketName !== "match"将返回false,因此我们转到第二张支票bucketName !== "test"。由于bucketName已经是"match",因此将返回true。如果我们将bucketName声明为"test",也是如此。

如果要检查bucketName既不是"test"也不是"match",请将if语句更改为(bucketName !== "match" && bucketName !== "test")

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我想您已经知道bucketName不能同时“匹配”和“测试”。因此,定义一个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
    }
 }