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