0

基本的に私の問題は、ランダムなスペース、タブ、その他の空白単位 (改行も多くありません) でいっぱいのテキスト入力をプログラムが受け取ることです。

すべてのタブを正常に削除しました...

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

これで、テキストは次のようになります...

"グループを非表示にするためのダミー フィールド , , , , , ,*役割 ,移動 , , , セクションを折りたたむ 概要 , , ,名前 ,Doe,John ,詳細 ,顧客 ,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 では、null 以外の文字列は true としてカウントされ||&&短絡評価として使用できます。たとえば、("Name" || " Name")get は true であると評価される"Name"ため"Name"、式の残りの部分を評価する必要はありません。同様に、("Name" && " Name")は と同等です。 は true である" Name"ため"Name"、次のものに移動します。" Name"これも true であり、ステートメントの最後です。あなたがしようとしていたことをするためには、次のようなことをする必要があります:

(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 に答える