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.match(/^[0-9]/)
于 2013-01-18T18:01:24.053 回答
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 回答