压缩条件

Compress If Conditions

本文关键字:条件 压缩      更新时间:2023-09-26

是否有这样一种方法来压缩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'
   ))) {

您可以用

替换这些测试
firstLetterLower.match(/[0-9]/)

( firstLetterLower>=0 && firstLetterLower<=9 )

使用正则表达式,您可以:

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

这将检查您指定的letter以及0和9之间的匹配。

然而,如果你不想使用regex(开销也许?在这里使用一个非常简单的regex并不会引起注意,您可以这样做:

firstLetterLower = itemKey.charAt(0).toLowerCase();
if(firstLetterLower == letter || (firstLetterLower >= 0 && firstLetterLower <= 9)){
}

尝试使用正则表达式:

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

您可以使用regex和您所拥有的组合。我可能会把它放到一个函数中:

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'));