-1

要約すると、私は、多くの冒とく的な言葉を保持する「badWords」と呼ばれる静的配列を持つswearフィルターを構築しようとしています。

次に、私のスクリプトは、すべてのテキスト値をフォームから「fieldValues」と呼ばれる別の配列に持ち上げます。

次に、fieldValuesを繰り返し処理し、文字列値を「badWords」の配列全体と比較し、見つかった場合は、今のところ単純な応答をトリガーする必要があります。

コードはエラーを生成していませんが、期待される出力も生成していません。どこで問題が発生したかについての洞察を提供していただければ幸いです。

コード

// get all the inputs from "editor_form"
var $inputs = $('#editor_form :input');

var fieldValues = new Array();
var i = 0;

//for each field place it in array
$inputs.each(function() 
{
    fieldValues[i] = $(this).val();
    i++;
});

var swearWord;
for (i = 0; i < fieldValues.length; i++)
{
    if (fieldValues[i] == function()
    {
        //this bit i think is wrong, i think it only does one loop in this level then jumps back up
        for (x = 0; x < badWords.length; x++)
        {
            return badWords[x];
        }
    })

    //warning message   
    {
        window.alert("Bad word found");
    }       
}

ありがとう

4

2 に答える 2

1

まず、次のように既存のコードを修正できます。

function isBad(word) {
     for (x = 0; x < badWords.length; x++) {
         if (badWords[x]==word) return true;
     }
     return false;
}
for (i = 0; i < fieldValues.length; i++) {
   if (isBad(fieldValues[i])) {
       window.alert("Bad word found : " + fieldValues[i]);
   }
}

しかし、あなたの悪い言葉は、論理的には、配列ではなくセットを形成します。それらをすばやく見つけるには、オブジェクトをマップとして使用する必要があります。

// build a set of the bad words
var badWordsSet = {};
for (x = 0; x < badWords.length; x++) badWordsSet[badWords[x]]=true;
// then use it
for (i = 0; i < fieldValues.length; i++) {
   if (badWordsSet[fieldValues[i]]) {
       window.alert("Bad word found : " + fieldValues[i]);
   }
}
于 2013-01-31T11:36:45.960 に答える
1

あなたが間違っていると信じているビットは、実際には間違っています。fieldValues[i]作成した関数と比較するのではなく、この値をそれぞれの値と比較する必要がありbadWordsます。そこには別の関数は必要ありません。内部サイクルだけです。

于 2013-01-31T11:37:25.410 に答える