IN子句使用JavaScript代码

时间:2015-08-13 18:06:04

标签: javascript in-clause

我的应用程序中有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

 }

6 个答案:

答案 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()方法确定数组是否包含某个数组   元素,根据需要返回truefalse



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;