在 IF 中优化 OR
Optimize OR in IF
我有这样的代码:
if (action == 'John' || action == 'John Beckham' || action == 'Henry John'){
alert('true!');
}
如何最小化此代码?
应该在IE7中工作。
如果"John"总是出现,最简单的事情是:
if (action.toLowerCase().indexOf("john") !== -1) {
// Do something
}
。但是由于您的问题已经更改了您检查action
一次的值,因此我犹豫是否要假设这一点。另请注意,它将匹配"xxxjohnxxx",这可能不是您想要的。
原始建议(针对编辑中的新action
值进行了更新(:
有很多方法,都使用区分大小写显示,因为您在评论中提到过:
String#indexOf
:
if ("|john|john beckham|john henry|giggs john|scholes john|john messi|".indexOf("|" + action.toLowerCase() + "|") !== -1) {
// Do something
}
正则表达式:
if (/^(?:John|John Beckham|John Henry|Giggs John|Scholes John|John Messi)$/i.test(action)) {
// Do something
}
因为你只是使用真/假结果,所以我使用test
只返回真/假,而不是exec
返回匹配结果。在这种情况下两者都有效,但浏览器可能能够稍微优化test
(但是,如果您的目标是最快的结果或最少的内存使用,正则表达式不太可能是最佳解决方案(。
或switch
:
switch (action.toLowerCase()) {
case "john":
case "john beckham":
case "john henry":
case "giggs john":
case "scholes john":
case "john messi":
// Do something
}
或对象查找:
var actions = {
"john": true,
"john beckham": true,
"john henry": true,
"giggs john": true,
"scholes john": true,
"john messi": true
};
if (actions[action.toLowerCase()]) {
// do something
}
(这也有一个优点,就是让你说出要做什么 ——例如,true
可以用你调用的函数替换。
或者(在启用 ES5 的环境中或使用 ES5 填充程序(Array#indexOf
:
if (["john", "john beckham", "john henry", "giggs john", "scholes john", "john messi"].indexOf(action.toLowerCase()) !== -1 {
// Do something
}
或者由于您使用 jQuery,因此您可以使用 inArray
来避免旧浏览器上的填充程序:
if ($.inArray(action.toLowerCase(), ["john", "john beckham", "john henry", "giggs john", "scholes john", "john messi"]) !== -1) {
// Do something
}
如果使用jquery,那么你可以做:
var arr = ['a','b','c','d','e','f','g'];
if( $.inArray(action, arr) !== -1 ) {
alert("true");
}
试试这个,它使用 indexOf:
if (['a', 'b', 'c', 'd', 'e'].indexOf(action) > -1) {
alert(true);
}
更新:如果要支持 IE7 及更低版本,请使用此问题的答案
如果你使用的是jQuery,你可以使用这样的$.inArray
:
if ($.inArray(action, ['a','b','c','d') > -1) {
alert(true);
}
更新
您还可以将正则表达式与test
一起使用(该组使正则表达式不匹配"John Langhammerer"
/操作与要匹配的字符有额外的字符(:
if ((/^(John Langhammer|Piet Krauthammer|Some Guy)$/i).test(action)) {
alert(true);
}
更新:/i
使正则表达式不区分大小写。
下面是一个适用于一字符操作的解决方案:
你也可以使用IE7支持的String.indexOf(如果你的操作都是一个字符(:
if ('abcde'.indexOf(action) > -1) {
alert(true);
}
创建一个数组,如下所示。
var newAry = array('a','b','c');
现在只需检查如下。
$(function()
{
var newAry = Array('a','b','c');
if($.inArray(action,newAry)){ alert(action); }
});
跨浏览器解决方案:
if ( action in {'John':1, 'John Beckham':1, 'John Henry':1, 'Giggs John':1, 'Scholes John':1, 'John Messi':1 } ){
alert('true!');
}
除了indexOf
,你也可以在Javascript中使用条件运算符。
names = ['John' ,
'John Beckham',
'John Henry' ,
'Giggs John' ,
'Scholes John',
'John Messi'
];
names.indexOf(action) != -1? alert('True') : alert ('False');
你想做的不仅仅是简单的语句,比如:
names.indexOf(action) != -1? doSomethingOnTrue() : doSomethingOnFalse();
if('abcdefg'.indexOf(action) > -1){
// action is one of 'abcdef'
}
- 以可优化的方式使用requirejs加载模板
- Angular 2.0 with JavaScript or TypeScript?
- 使用优化器在慢速连接上加载main.js时需要js超时
- JavaScript数组优化以提高性能
- SharePoint 2010 Jquery/JSON Rest Multiple OR语句-如何
- GWT (or javascript) library for couchDB
- React+Redux性能优化与组件ShouldUpdate
- 在 Jquery/Javascript 中使用多个 OR (||) 运算符时如何设置变量
- JavaScript尾部调用中的函数是否经过优化
- JavaScript中的逻辑OR(||)
- javascript中的快捷方式融合优化
- ||(OR)运算符如何在赋值中工作
- 如何优化循环以插入到数据库中
- 在Javascript中为if/else语句添加OR
- Css优化谷歌页面速度洞察
- 如何用Javascript编写OR
- 什么's在javascript'的优化上下文
- JavaScript代码优化-创建可重用类
- 如何优化jquery动画代码
- 在 IF 中优化 OR