有没有更好的方法来写这个?我试图教自己良好的javascript编码习惯和技巧,这只是我无法理解的一件事:
var testData = rowData[1].toLowerCase();
if((testData == "bar") || (testData == "server") || (testData == "service breakfast")){
continue;
}
if((testData == "service dinner") || (testData == "to go")){
continue;
}
这很有效,但基本上是一个强大的力量"攻击问题。我尝试过使用数组和.match函数,但testData中有子字符串,它匹配并且不应该。快速示例是如果testData ='服务器/调酒师',它匹配' bar'在酒保,不应该。
答案 0 :(得分:3)
根据偏好,有很多选择。 首先,通过简单的格式更改,您可能会发现代码更具可读性:
if (testData == "bar ||
testData == "server" ||
testData == "service breakfast ||
testData == "service dinner" ||
testData == "to go") {
continue;
}
如果你不喜欢,那就是javascript的开关/案例陈述:
switch (testData) {
case "bar":
case "server":
case "service breakfast":
case "service dinner":
case "to go":
continue;
}
或者你可以测试一系列选项:
const options = ["bar", "server", "service breakfast", "service dinner", "to go"];
if (options.includes(testData)) {
continue;
}
甚至使用正则表达式:
const pattern = /^(bar|server|service breakfast|service dinner|to go)$/;
if (pattern.test(testData)) {
continue;
}
我的个人偏好是针对一系列值进行测试,但javascript提供了许多选项来做你想要的事情;你可以自由选择对你最有意义的那个。
答案 1 :(得分:1)
您可以尝试这样的事情:
var testData = rowData[1].toLowerCase();
var skip = ["bar", "server", "service breakfast", "service dinner", "to go"];
if (skip.indexOf(testData) > -1) continue;
也许你会发现这个更简单...
答案 2 :(得分:0)
var testData = rowData[1].toLowerCase();
const continueCaseA = ["bar", "server", "service breakfast"];
const continueCaseB = ["service dinner", "to go"];
if(continueCaseA.includes(testData)){
console.log("caseA")
continue;
}
if(continueCaseB.includes(testData)){
console.log("caseB")
continue;
}
https://jsfiddle.net/hs9vt2zd/
你可以尝试这个:)
.match函数可以工作,如果你有一些模式来检查
var str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
var regexp = /[A-E]/gi;
var matches_array = str.match(regexp);
console.log(matches_array);
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/match
我不确定,这是你的情况