gpt4 book ai didi

javascript - 优化 IF 中的 OR

转载 作者:行者123 更新时间:2023-12-01 01:57:01 25 4
gpt4 key购买 nike

我有这样的代码:

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
}

因为您只是使用 true/false 结果,所以我使用 test它只返回 true/false,而不是 exec返回匹配结果。在这种情况下,两者都有效,但浏览器可能能够稍微优化 test (但是,如果您的目标是最快的结果或最少的内存,则正则表达式不太可能是最佳解决方案使用)。

<小时/>

或者开关:

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 shim)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
}

关于javascript - 优化 IF 中的 OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15066671/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com