陣列方法實現(八)————陣列方法indexOf()
阿新 • • 發佈:2019-02-06
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;
}