使用If语句过滤具有多个字符串值的数据
我想在一行中对文件扩展名进行排序,因为如果不这样做,我必须编写多行代码,我认为这是浪费时间。我可以在这里得到一些帮助
if (fileExtension === "jpg"||"Jpeg"||"png"||"svg"){
//do something
}
else{
//do something else
}
如果文件扩展名为jpg,则直接切换到else语句;如果我仅给出jpg,即if (fileExtension === "jpg")
,则代码运行良好,我想使用多个。
答案 0 :(得分:5)
"jpg"||"Jpeg"||"png"||"svg"
是一个表达式,其计算结果为第一个真实值。 "jpg"
是第一个真实值,因此整个表达式变为"jpg"
。参见Short-circuit evaluation
。
您可以将所有值存储在数组中,然后在数组上使用some()
并将其与fileExtension
进行比较
"Jpeg"
可能会引起一些问题。大写J
。我建议您将所有值更改为小写,然后在some()
let fileExtension = "svg"
if (["jpg","jpeg","png","svg"].some(x => fileExtension.toLowerCase() === x)){
console.log("found")
}
else{
cosnole.log("not found")
}
注意:在这种情况下,您也可以使用includes()
。但是我更喜欢some()
,因为它允许用户比较多个条件
答案 1 :(得分:3)
其他所有人都在使用数组,因此下面是使用正则表达式[1] [2]的示例:
function testExtension(fileExtension) {
if (/jpg|jpeg|png|svg/.test(fileExtension.toLowerCase())) {
console.log(`${fileExtension} found`);
} else {
console.log(`${fileExtension} not found`);
}
}
testExtension('mpg');
testExtension('jpg');
testExtension('svg');
答案 2 :(得分:0)
if (fileExtension === "jpg"|| fileExtension ==="Jpeg" || fileExtension ==="png" || fileExtension ==="svg"){
//do something
}
else{
//do something else
}
您应该使用fileExtension检查每个字符串。
答案 3 :(得分:0)
包含可以解决您的问题。
if (["jpg", "Jpeg", "png", "svg"].includes(fileExtension)) {
//do something
} else{
//do something else
}
答案 4 :(得分:0)
您可以使用includes数组原型:
if (['jpg', 'Jpeg', 'png', 'svg'].includes(fileExtension)) {
...
}
您也可以将其添加到LowerCase(),以使其更加安全:
if (['jpg', 'jpeg', 'png', 'svg'].includes(fileExtension.toLowerCase())) {
...
}
作为另一种(但可读性更差)的OR条件:
if (fileExtension === 'jpg' || fileExtension === 'Jpeg'
|| fileExtension === 'png' || fileExtension ==='svg'){
如您所见,它的可读性较差,带有更多参数。
答案 5 :(得分:0)
使用.indexOf()
返回项目位置,如果该项目不存在,则返回-1
if(["jpg","jpeg","png","svg"].indexOf(fileExtension) > -1){
//do something...
}
使用.filter()
if(["jpg","jpeg","png","Svg"].filter(function(i){return i.toLowerCase() === fileExtension.toLowerCase()}).length == 1){
//do something...
}