如果具有多个条件的语句不起作用
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")) {}
我有一个这样的 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")) {}