它应该做什么 - 实施例
url1(pages,"ALT") returns "www.xyz.ac.uk"
url1(pages,"xyz") returns ""
错误 - TypeError: Cannot call method 'toUpperCase' of undefined
这只是为了一些课程,我坚持这些错误。任何帮助将不胜感激
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 "";
}
}
}
答案 0 :(得分:2)
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/
答案 1 :(得分:1)
就在这里:
alert(url1(pages, ALT)); // ALT ISN'T DEFINED
我相信你忘了引用它:
alert(url1(pages, "ALT"));
答案 2 :(得分:0)
您应该拆分传递分隔符字符本身的字符串。您的功能将如下所示:
function url1(pages,pattern) {
var siteContent = [];
for(i=0;i<pages.length;i++) {
var seperator = pages[i].charAt(0);
console.log(seperator);
if(pages[i].indexOf(seperator)>=0){
siteContent = pages[i].split(seperator); //fixed here
}
console.log(siteContent);
if( index(siteContent[2],pattern,false)>=0){
return siteContent[1];
}else{
return "";
}
}
}
请告诉我们它是否有效。
编辑:看到你的索引()也有一点问题。请尝试以下功能。function index(string,pattern,caseSensitive) {
var v;
if(caseSensitive == false) {
v = string.toUpperCase();
pattern = pattern.toUpperCase(); //to clarify: pattern should be uppercased also if caseSensitiveness is false
} else {
v = string;
}
return v.indexOf(pattern);
}
编辑2:
url1()最终是这样的:
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(seperator);
}
if( index(siteContent[2],pattern,false)>=0){
return siteContent[1];
}
}
return "";
}
在这种情况下,将返回所有页面中第一次出现的模式。