礼拜三,老师留了一道有意思的练习题: 原生JS实现ndexOf。在网上搜索了一下,答案都不太对,所以自己写了一下
乍看一下,十分简单,但是要知道,indexOf是可以查询多位数的子串在父串中的位置,而且还能制定起始位置。多位数中还可能有特殊字符,例如空格,下划线等。做一个字符在字符串的位置很简单,那么多个呢,特殊字符呢,还有大小写可不是同一个字符。
现在,我们来写一下这个函数
function MyIndexOf(str2,str1,n){//n为起始位置
let i;//循环变量
let len1=str1.length;//子串长度
let len2=str2.length;//父串长度
if(n==undefined ||n==null||n<=-1) {//没有传入起始位置时,从第一位开始
i=0;
}else if(n>len2-1){//如果起始位置大于字符串最后一位,返回-1,不存在
return -1;
}else{//如果不存在上述2种情况,从第n位开始
i=n;
}
if(len1>len2){//如果子串长大于父串,那么肯定不存在,返回-1
return -1;
}else if(len1==len2){//如果相等,就对比2个字符串的内容
if(str1==str2){//如果内容相等,那么就是从第一位开始,返回0
return 0;
}else{//长度相等,内容不相等,那么肯定不存在啦
return -1;
}
}else{
let str21='';
while(i<len2){
//拼合对比的父串,i到len1
str21=str2.substr(i,len1);//每次都拿出和子串长度一样的字符串去对比
if(str21==str1){
return i;//这里返回的就是第一次子串出现的位置,符合indexOf
}
i++;
}
if(i==len2){//如果循环到父串最后一位还是没有出现相等,那么就是-1不存在
return -1;
}
}
}