1. 程式人生 > >陣列方法實現(八)————陣列方法indexOf()

陣列方法實現(八)————陣列方法indexOf()

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; }