使用JavaScript代码的IN子句



我的应用程序中有JavaScript代码,使用OR(||)条件检查值,如下面的代码片段所示。在我的大多数代码中,OR条件的数量并不小。

问题:是否有一种方法,使代码有许多多个或条件更简洁,通过使用这样的东西:value IN ('s','b','g','p','z') ?我感兴趣的是一些尽可能接近in子句的东西。

if(value === "s" || value === "b" || value === "g" || value === "p" || value === "z") {
  //do something
 }

最简单的方法是创建一个有效值数组,然后确保您的值在该列表中。您可以使用indexOf方法:

var allowed = ['s', 'b', 'g', 'p', 'z'];
if (allowed.indexOf(value) !== -1) {
  // do something
}

ES6标准引入了set,它有一个has方法来对唯一值做类似的事情。

这将适用于字符串、数字和其他简单的非对象值。只有当数组/集合已经包含完全相同的对象时,与===比较对象才会成功。

你可以这样做:

var values = ['s','b','g','p','z'];
if (values.indexOf(value) > -1)

您也可以使用javascript .includes() helper。

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

事实上,JavaScript中有一个in,它可以完全用于您的情况。用您喜欢的任何值构造一个字典,但使用您允许的字母作为键:

allowed = { 's':true, 'b':true, 'g':true, 'p':true, 'z':true };

现在您可以直接使用in测试(并且比在列表中查找更有效)。这里复制自我的JavaScript控制台:

's' in allowed
true
'q' in allowed
false

单个字符的解决方案:

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]();

为什么不lodash的includes函数?

var val = 's';
var criterion = ['s','b','g','p','z'];
_.includes(criterion, val);

返回true;

相关内容

  • 没有找到相关文章

最新更新