1

この文字列をループすると、アラートは test を 4 回 (正しく) 出力しますが、最後に "undefined" も出力します。未定義を返さないようにするにはどうすればよいですか。

これは - undefinedCAFE :: を返します

alert(match("abcdef", "CAfe"));


function match(string, pattern) {

    var patternUpperCase = pattern.toUpperCase();
    var stringUpperCase = string.toUpperCase();
    var stringConcatenate;
    var answer;

    for (var i = 0; i < patternUpperCase.length; i++) {
        if (patternUpperCase.charAt(i) != undefined) {
            if (patternUpperCase.charAt(i) >= 'A' && patternUpperCase.charAt(i) <= 'Z') {
                stringConcatenate += patternUpperCase.charAt(i);
                alert("test");
            }
        }
    }
    return stringConcatenate;
}

これは関数が行う必要があることです: pattern のすべての個々の文字が (順序に関係なく) 文字列に現れる場合に true を返します (大文字と小文字を区別しません)

例 match("abcdef","@C2D!") は true を返します match("abcdef","CAfe") は true を返します match("abcdef","CG") は false を返します

4

4 に答える 4

2

初期化されていない文字列を他の文字列と接触させているため、エラーが発生します。

この行 (最初の繰り返し):

stringConcatenate += patternUpperCase.charAt(i);

stringConcatenate初期化されていない場所は次のように読み取られます。

stringConcatenate = "undefined" + patternUpperCase.charAt(i);

したがって、コードでこれを行います:

var stringConcatenate = "";

文字列の文字にアクセスする際の注意事項:
メソッド を使用する場合String.charAt()、戻り値のテストは次のようになります。

if(somestring.charAt(x)!="") 
   ... valid

ただし、配列演算子を使用して文字列のオフセットにアクセスすることもできます[x]。これは確かに戻りundefinedます:

if(typeof somestring[x]!="undefined")
于 2013-11-09T18:32:13.323 に答える
0

正規表現関数を使用しないのはなぜですか?

alert( !/[^pattern]/.test(string) );

または、@ 記号に準拠させるには:

alert( !/[^pattern]/.replace(/[^a-zA-Z]/, '').test(string) );

最後の例では、az (下位と上位) 以外のすべてを削除し、残りの文字列に禁止文字があるかどうかをテストします。

これによりtrue、「間違った」文字が見つかったときに が返されるため、!

于 2013-11-09T18:25:17.547 に答える
0

間違い: 1. stringConcatenate が初期化されていません。2.パターンの文字が「文字列」に存在する条件をチェックしなかったため、コードは不完全でした。

これで問題が解決するはずです:

function fooo(){
str = "abcdsdfef";
pattern = "d234g4f";
var patternUpperCase = pattern.toUpperCase();
var stringUpperCase = str.toUpperCase();
var stringConcatenate="";
var answer = true;

for (var i = 0; i < patternUpperCase.length; i++) {
    if (patternUpperCase.charAt(i) != undefined) {
        if (patternUpperCase.charAt(i) >= 'A' && patternUpperCase.charAt(i) <= 'Z') {
            stringConcatenate += patternUpperCase.charAt(i);
    if(stringUpperCase.indexOf(patternUpperCase.charAt(i)) == -1){
        answer = false;
        break;
    }
        }
    }
}
alert(answer);

}

于 2013-11-09T19:22:35.403 に答える
0

最初に stringConcatenate を文字列変数として設定します。

alert(match("abcdef", "CAfe"));


function match(string, pattern) {

    var patternUpperCase = pattern.toUpperCase();
    var stringUpperCase = string.toUpperCase();
    var stringConcatenate = '';

    for (var i = 0; i < patternUpperCase.length; i++) {
        if (patternUpperCase.charAt(i) != undefined) {
            if (patternUpperCase.charAt(i) >= 'A' && patternUpperCase.charAt(i) <= 'Z') {
                stringConcatenate += patternUpperCase.charAt(i);
                console.log(stringConcatenate);
            }
        }
    }
    return stringConcatenate;
}
于 2013-11-09T18:41:53.313 に答える