它应该做什么 - 示例
url1(pages,"ALT") returns "www.xyz.ac.uk"
url1(pages,"xyz") returns ""
错误 - TypeError: Cannot call method 'toUpperCase' of undefined
这只是一些类(class)作业,我遇到了这些错误。任何帮助将不胜感激
function index(string,pattern,caseSensitive) {
if(caseSensitive == false) {
var v = string.toUpperCase();
} else {
var v = string;
}
return indexNumber = v.indexOf(pattern);
}
var pages = [ "|www.lboro.ac.uk|Loughborough University offers degree programmes and world class research.", "!www.xyz.ac.uk!An alternative University" , "%www%Yet another University"];
alert(url1(pages, "ALT"));
function url1(pages,pattern) {
var siteContent = [];
for(i=0;i<pages.length;i++) {
var seperator = pages[i].charAt(0);
if(pages[i].indexOf(seperator)>0){
siteContent = pages[i].split(pages[i].indexOf(seperator));
}
if( index(siteContent[2],pattern,false)>=0){
return siteContent[1];
}else{
return "";
}
}
}
最佳答案
if(pages[i].indexOf(seperator)>0){
siteContent = pages[i].split(pages[i].indexOf(seperator));
}
if( index(siteContent[2],pattern,false)>=0){
return siteContent[1];
}else{
return "";
}
如果pages[i].indexOf(seperator)<=0
, siteContent
仍然是上次迭代的内容。如果第一次迭代发生这种情况,siteContent
还是[]
, 和 siteContent[2]
是undefined
.
另一个问题:表达式pages[i].indexOf(seperator)
返回一个数字,pages[i].split
需要一个定界字符串作为参数。由于数字没有出现在您的输入中,您将始终得到一个单元素数组,并且 siteContent[2]
永远是undefined
.摆脱 .indexOf(seperator)
, 改为 siteContent = pages[i].split(seperator)
.
还有一个:摆脱else { return ""; }
.添加 return "";
在for
之后循环。
最后,在第一个if
声明条件,改变.indexOf(seperator) > 0
至 .indexOf(seperator, 1) !== -1
.因为你得到 seperator
从字符串的第一个字符开始,它将在 0
处找到.您想要第二次出现,所以开始搜索 1
.此外,.indexOf
返回 -1
如果找不到子字符串。您需要在 if
中考虑到这一点条件。
旁注,因为这不会导致您的问题:永远不要使用 == false
. JS 会强制执行类似 0
的内容和 ""
至 == false
.如果那是你想要的,只需使用 !
运算符,因为表达式与值无关 false
.
我的最终答案是http://jsfiddle.net/QF237/
关于JavaScript 抛出未定义的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19848982/