indexOf()、lastIndexOf()方法
相同点:
都接收两个参数————要查找的项、要查找起点位置是索引(可选)
不同点:查找方式
indexOf():从数组的开头(位置0)向后查找
lastIndexOf():从数组末尾向前查找
下面仅以indexOf()为例(lastIndexOf()类似),如下:
var str = 'hellohelloworlda';
var substr1 = 'a';
var substr2 = 'll';
var substr3 = 'rld';
var substr4 = 'lohe';
var substr5 = 'hello';
var substr6 = 'llowor';
var substr7 = 'zhello';
var substr8 = 'llo';
console.log('str的长度是:' + str.length + ' ' + '子串substr1位置是:' + searchStr(str, substr1, 1)); //str的长度是:16 子串substr1位置是:15
console.log('str的长度是:' + str.length + ' ' + '子串substr2位置是:' + searchStr(str, substr2, 2)); //str的长度是:16 子串substr2位置是:2
console.log('str的长度是:' + str.length + ' ' + '子串substr2位置是:' + searchStr(str, substr2, 5)); //str的长度是:16 子串substr2位置是:7
console.log('str的长度是:' + str.length + ' ' + '子串substr3位置是:' + searchStr(str, substr3, 1)); //str的长度是:16 子串substr3位置是:12
console.log('str的长度是:' + str.length + ' ' + '子串substr4位置是:' + searchStr(str, substr4, 1)); //str的长度是:16 子串substr4位置是:3
console.log('str的长度是:' + str.length + ' ' + '子串substr5位置是:' + searchStr(str, substr5, 1)); //str的长度是:16 子串substr5位置是:5
console.log('str的长度是:' + str.length + ' ' + '子串substr5位置是:' + searchStr(str, substr5, 7)); //str的长度是:16 子串substr5位置是:-1
console.log('str的长度是:' + str.length + ' ' + '子串substr6位置是:' + searchStr(str, substr6, 1)); //str的长度是:16 子串substr6位置是:7
console.log('str的长度是:' + str.length + ' ' + '子串substr7位置是:' + searchStr(str, substr7, 1)); //str的长度是:16 子串substr7位置是:-1
//两个参数
console.log('str的长度是:' + str.length + ' ' + '子串substr5位置是:' + searchStr(str, substr5)); //str的长度是:16 子串substr5位置是:0
console.log('str的长度是:' + str.length + ' ' + '子串substr6位置是:' + searchStr(str, substr6)); //str的长度是:16 子串substr6位置是:7
console.log('str的长度是:' + str.length + ' ' + '子串substr8位置是:' + searchStr(str, substr8)); //str的长度是:16 子串substr8位置是:2
console.log('str的长度是:' + str.length + ' ' + '子串substr8位置是:' + searchStr(str, substr8, 3)); //str的长度是:16 子串substr8位置是:7
function searchStr(str, substr, index) {
var result;
var arr = [];
var len1 = str.length;
var len2 = substr.length;
var i = index;
if(len1 < len2) { //子字符串长度大于要比较的字符串长度
return;
}
if(arguments.length == 3) { //参数个数三个的时候
compare(arguments[2]);
}
else if(arguments.length == 2) { //参数个数两个的时候
compare(0);
}
//比较函数
function compare(index) {
for(i = index; i < len1; i++) {
if(len2 == 1) { //字符串长度为1时
if(str.charAt(i) == substr.charAt(0)) {
// result = i;
arr.push(i);
break;
}
}
if(substr.charAt(0) == str.charAt(i)) { //字符串长度两个或两个以上时
for(var j = 1; j < len2; j++) {
// console.log('i的值是:' + i + ' ' + 'j的值是:' + j + ' ' + 'j+i的值是:' + (j+i) + ' ' + substr.charAt(j) + ' ' + str.charAt(j + i)); //测试代码
if(substr.charAt(j) !== str.charAt(j + i)) {
break;
}
if( j == len2 - 1) {
arr.push(i);
}
}
}
else {
// console.log('i的值是:' + i + ': ' + str.charAt(i)); //测试代码
continue;
}
}
}
return result = (arr[0] >=0) ? arr[0] : -1;
}