是否有这样的方法来压缩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'
))) {
答案 0 :(得分:6)
您可以使用
替换这些测试firstLetterLower.match(/[0-9]/)
或
( firstLetterLower>=0 && firstLetterLower<=9 )
答案 1 :(得分:0)
尝试使用正则表达式:
firstLetterLower.match(/^[0-9]/)
答案 2 :(得分:0)
使用正则表达式,您可以:
firstLetterLower = itemKey.charAt(0).toLowerCase();
if(firstLetterLower == letter || firstLetterLower.match(/^[0-9]$/) ){
}
这将检查您指定的letter
以及0到9之间的匹配。
但是,如果你不想使用正则表达式(也许是开销?不是说这里有一个非常简单的正则表达式会引起注意),你可以这样做:
firstLetterLower = itemKey.charAt(0).toLowerCase();
if(firstLetterLower == letter || (firstLetterLower >= 0 && firstLetterLower <= 9)){
}
答案 3 :(得分: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'));