2

私はこのようなコードを持っています:

if (action == 'John' || action == 'John Beckham' || action == 'Henry John'){
     alert('true!');
}

このコードを最小化するにはどうすればよいですか?

IE7 で動作するはずです。

4

7 に答える 7

8

「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
}
于 2013-02-25T12:11:38.710 に答える
3

jqueryを使用している場合は、次のことができます。

var arr = ['a','b','c','d','e','f','g'];
if( $.inArray(action, arr) !== -1 ) {
  alert("true");
}
于 2013-02-25T12:13:06.210 に答える
2

これを試してください、それは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);
}
于 2013-02-25T12:11:48.417 に答える
1

に加えて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(); 
于 2013-02-25T12:25:47.153 に答える
1

以下のように配列を作成します。

var newAry = array('a','b','c');

以下のように確認してください。

$(function()
{
    var newAry = Array('a','b','c');
    if($.inArray(action,newAry)){ alert(action); }
});
于 2013-02-25T12:12:34.853 に答える
1

クロスブラウザ ソリューション:

if ( action in {'John':1, 'John Beckham':1, 'John Henry':1, 'Giggs John':1, 'Scholes John':1, 'John Messi':1 } ){
     alert('true!');
}
于 2013-02-25T12:18:47.727 に答える
0
if('abcdefg'.indexOf(action) > -1){
    // action is one of 'abcdef'
}
于 2013-02-25T12:12:01.787 に答える