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