IN 子句使用 JavaScript 代码

IN clause using JavaScript code

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

 }

为什么没有 lodash 的 includes 功能?

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

returns true;

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

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

ES6 标准引入了 Sets,它 a has method 可以对唯一值做类似的事情。

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

你可以这样做:

var values = ['s','b','g','p','z'];

if (values.indexOf(value) > -1)

事实上,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]();

您还可以使用 javascript .includes() 助手。

The includes() method determines whether an array includes a certain element, returning true or false as appropriate.

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