1

循环遍历此字符串时,警报会打印出 test 4 次(正确),但最后还会打印“未定义”。我如何使它不返回未定义。

这将返回 - 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;
}

这是函数需要做的:如果所有单独的模式字母都出现在字符串中(不管顺序),则返回 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

首先将 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 回答
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 回答