0

ifステートメント内の条件のブロックを圧縮する方法はありますか? コードからわかるように、itemKeyは変数です。最初の文字を小文字に設定して、別の変数に一致させることができますletter。以下は完全に機能しますが、クリーンアップしたいと思います。0 から 9 までのすべての数字を含むように、どうにかしてすべてをまとめることはできます||か? &&これはstringではなくとして機能していintegerます。

firstLetterLower = itemKey.charAt(0).toLowerCase();
if(firstLetterLower==letter || (
   letter=='number' && (
      firstLetterLower=='0' || firstLetterLower=='1' || firstLetterLower=='2' || 
      firstLetterLower=='3' || firstLetterLower=='4' || firstLetterLower=='5' || 
      firstLetterLower=='6' || firstLetterLower=='7' || firstLetterLower=='8' || 
      firstLetterLower=='9'
   ))) {
4

4 に答える 4

6

これらのテストを次のように置き換えることができます

firstLetterLower.match(/[0-9]/)

また

( firstLetterLower>=0 && firstLetterLower<=9 )
于 2013-01-18T18:00:03.180 に答える
0

正規表現を使用すると、次のことができます。

firstLetterLower = itemKey.charAt(0).toLowerCase();

if(firstLetterLower == letter || firstLetterLower.match(/^[0-9]$/) ){
}

letterこれにより、指定されたものと、0と9が一致するかどうかがチェックされます。

ただし、正規表現を使用したくない場合(おそらくオーバーヘッドですか?1つの非常に単純な正規表現でここで目立つわけではありません)、次のように実行できます。

firstLetterLower = itemKey.charAt(0).toLowerCase();

if(firstLetterLower == letter || (firstLetterLower >= 0 && firstLetterLower <= 9)){
}
于 2013-01-18T18:06:43.427 に答える
0

あなたは正規表現とあなたが持っているものの組み合わせを使うことができます。私はおそらくそれを関数に入れます:

function isMatch(itemKey, letter) {
    firstLetterLower = itemKey.charAt(0).toLowerCase();
    if (firstLetterLower == letter) return true;

    if (letter == 'number'){
       if (firstLetterLower.match(/[0-9]/))
         return true;
        }
     return false;
}


alert("1:" + isMatch('item', 'i'));
alert("2:" +isMatch('1234567', 'number'));
alert("3:" +isMatch('abc','number'));
alert("4:" +isMatch('123','a'));
于 2013-01-18T18:08:19.007 に答える
0

正規表現を使用してみてください:

firstLetterLower.match(/^[0-9]/)
于 2013-01-18T18:01:24.053 に答える