我的应用程序中有JavaScript代码,它使用OR(||)条件检查值,如下面的代码片段所示。在我的大多数代码中,OR条件的数量并不小。
问题:有没有办法通过使用类似这样的内容来使具有多个OR条件的代码更简洁:value IN ('s','b','g','p','z')
?我对尽可能接近IN子句的东西感兴趣。
if(value === "s" || value === "b" || value === "g" || value === "p" || value === "z") {
//do something
}
答案 0 :(得分:4)
最简单的方法是创建一个有效值数组,然后确保您的值在该列表中。您可以使用indexOf
method:
var allowed = ['s', 'b', 'g', 'p', 'z'];
if (allowed.indexOf(value) !== -1) {
// do something
}
ES6标准引入了集合,其中a has
method对唯一值执行类似操作。
这适用于字符串,数字和其他简单的非对象值。将对象与===
进行比较只有在数组/集合已经包含完全相同的对象时才会成功。
答案 1 :(得分:2)
您还可以使用javascript .includes()
帮助器。
includes()
方法确定数组是否包含某个数组 元素,根据需要返回true
或false
。
var array1 = [1, 2, 3];
console.log(array1.includes(2));
// expected output: true
var pets = ['cat', 'dog', 'bat'];
console.log(pets.includes('cat'));
// expected output: true
console.log(pets.includes('at'));
// expected output: false

答案 2 :(得分:1)
你可以这样做:
var values = ['s','b','g','p','z'];
if (values.indexOf(value) > -1)
答案 3 :(得分:1)
事实上,JavaScript中有一个in
,它可以完全用于您的案例。使用您喜欢的任何值构建字典,但使用允许的字母作为键:
allowed = { 's':true, 'b':true, 'g':true, 'p':true, 'z':true };
现在,您可以直接使用in
测试(并且比列表中的查找更有效)。这里从我的JavaScript控制台复制:
's' in allowed
true
'q' in allowed
false
答案 4 :(得分:1)
单个字符的解决方案:
var value = 'g';
if (~'sbgpz'.indexOf(value)) {
document.write(value + ' found');
}

字符串字符的解决方案:
var value = 'go';
if (~['so', 'bo', 'go', 'po', 'zo'].indexOf(value)) {
document.write(value + ' found');
}

对象属性的解决方案:
var value = 'go';
var toDo = {
so: function () { document.write('prop so found'); },
go: function () { document.write('prop go found'); }
};
value in toDo && toDo[value]();

答案 5 :(得分:0)
为什么不是lodash的includes
功能?
var val = 's';
var criterion = ['s','b','g','p','z'];
_.includes(criterion, val);
返回true
;