0

基本上我的问题是我的程序接受的文本输入充满了随机空格、制表符和其他空白单元(换行符也是如此,但没有那么多)。

我已成功删除所有标签...

// Parse the input box into an array
var inputArr = document.getElementById("inputBox").value.split(/[\t]/);

现在文本看起来像这样......

"隐藏组的虚拟字段 , , , , , , ,*Role ,Go To , , , Collapse section Summary , , , ,Name ,Doe,John ,Details ,Customer ,John Doe Inc.

我的问题:我有一个开关...

switch(inputArr[i]) {

...有几种情况...

        case ("Name" || "Name " || " Name" || " Name "):
            if(inputArr[i - 1] == ("Summary" || "Summary " || " Summary" || " Summary ")) {
                contNameBool = true;
                break;
            }
            break;
        case ("Details" || "Details " || " Details" || " Details "):
            if(contNameBool == true) {
                contNameBool = false;
                break;
            } else if(contNameBool == false && compNameBool == true) {
                compNameBool = false;
                break;
            }
            break;
        case ("Customer" || "Customer " || " Customer" || " Customer "):
            if(inputArr[i - 1] == "Details") {
                contNameBool = false;
                compNameBool = true;
                break;
            }
            break;
        case "Address":
            if(inputArr[i - 1] == "Profile") {
                compNameBool = false;
                emailBool = true;
                break;
            }
            break;
        case ("VISA" || "MASTERCARD" || "AMERICAN" || "DISCOVER"):
            emailBool = false;
            break;
        case "Show":
            if(inputArr[i + 1] == "next" && inputArr[1 + 2] == "row") {
                accountLinesArray.length = inputArr[i - 1];
                for(j = 0; j < accountLinesArray.length; j++) {
                    accountLinesArray[j] = new account();
                }
                break;
            }
            break;
        case "Order":
            if(inputArr[i + 1] == "ID" && inputArr[i + 2] == "MRC") {
                accountsBool = true;
                break;
            }
            break;

正如您可能知道的那样,我试图让我的程序识别文本中的某些关键词并相应地切换一些布尔值。无论我如何配置条件,switch 语句似乎都不会涉及任何情况。例如案件...

case ("Name" && "Name " && " Name" && " Name "):

不会触发,即使我使用 ||。

在任何人发布之前。我意识到我的代码充其量是草率的。任何帮助将不胜感激。

4

2 回答 2

3

首先,您仅在选项卡上进行拆分。要拆分任何空白字符序列,请执行以下操作:

var inputArr = document.getElementById("inputBox").value.split(/\s+/);

这将减少您需要处理的案例数量,因此您无需检查“姓名”、“姓名”、“姓名”或“姓名”,只需检查“姓名”:

case "Name":
    ...
    break;

其次,这与您期望的不一样(请参阅下面的说明):

inputArr[i - 1] == ("Summary" || "Summary " || " Summary" || " Summary ")

但是通过上面的第一个更改,您无论如何都可以与“摘要”进行比较。

第三,对于您确实想要匹配完全不同的值的情况,您可以这样做:

case "VISA":
case "MASTERCARD":
case "AMERICAN":
case "DISCOVER":
    emailBool = false;
    break;

最后,你真的应该重新考虑你的整个方法,但没有更多细节,很难给你任何有意义的建议......

祝你好运!

编辑(为什么inputArr[i - 1] == ("Summary" || "Summary " || ...不工作):

在 Javascript 中,非空字符串算作真,||并且&&可以用作短路评估。例如,("Name" || " Name")get 被评估为"Name"因为"Name"是真的,所以等式的其余部分不需要评估。同样,("Name" && " Name")将等价于" Name",因为"Name"它为真,所以它移动到下一个," Name"这也是真并且是语句的结尾。要执行您正在尝试的操作,需要执行以下操作:

(inputArr[i - 1] == "Summary") || (inputArr[i - 1] == "Summary ") || ...

或者可以通过使用正则表达式更简单地完成:

!!inputArr[i - 1].match("Summary").length
// Be careful though, as this could also match something like "NotASummaryDude"
于 2013-02-02T21:58:45.607 回答
0

应用 Ray 的建议后,您可能还想从数组中删除空元素:

for (var i=inputArr.length-1; i>=0; i--){
    if (inputArr[i] == '' || !inputArr[i].match(/[^\s]/)) inputArr.splice(i,1)
}
于 2013-02-02T22:03:39.960 回答