上次迭代返回未定义

Last iteration returns undefined

本文关键字:未定义 返回 迭代      更新时间:2023-09-26

循环遍历此字符串时,警报会打印出测试4次(正确),但最后也会打印"undefined"。如何使其不返回未定义。

这返回 - 未定义CAFE ::

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!")返回真值 match("abcdef","CAfe") 返回 true match("abcdef","CG") 返回假

发生错误是因为您正在将未初始化的字符串与其他字符串联系。

此行(第一次迭代):

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")

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

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

或者使其符合@符号:

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

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

因为这会在发现"错误"字符时给出true,所以用!反转

首先将字符串连接为字符串变量。

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;
}

错误:1. 字符串连接未初始化。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);

}