私はこのようなコードを持っています:
if (action == 'John' || action == 'John Beckham' || action == 'Henry John'){
alert('true!');
}
このコードを最小化するにはどうすればよいですか?
IE7 で動作するはずです。
私はこのようなコードを持っています:
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 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
}
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);
}
UPDATE :/i
正規表現の大文字と小文字を区別しません。
以下は、1文字のアクションで機能するソリューションです。
IE7 でサポートされているString.indexOfを使用することもできます (アクションがすべて 1 文字の場合)。
if ('abcde'.indexOf(action) > -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();
以下のように配列を作成します。
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!');
}
if('abcdefg'.indexOf(action) > -1){
// action is one of 'abcdef'
}