最后一次迭代返回undefined

时间:2013-11-09 18:21:23

标签: javascript loops for-loop undefined

当循环遍历此字符串时,警报会打印出测试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;
}

这是函数需要做的事情:如果模式的所有单个LETTERS出现在字符串中(无论顺序如何),则返回true(不区分大小写)

实例     match(“abcdef”,“@ C2D!”)返回true     match(“abcdef”,“CAfe”)返回true     match(“abcdef”,“CG”)返回false

4 个答案:

答案 0 :(得分: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")

答案 1 :(得分:0)

为什么不使用正则表达式函数?

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

或使其符合@ sign:

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

最后一个示例删除除a-z(下部和上部)之外的所有内容,然后测试剩余字符串中是否有任何禁用字符。

因为这会在找到“错误”字符时给出true,请使用!

将其反转

答案 2 :(得分: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;
}

答案 3 :(得分: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);

}