用最簡(jiǎn)潔代碼實(shí)現(xiàn) indexOf 方法
indexOf 有兩種:
String.prototype.indexOf()
返回從 fromIndex 處開始搜索第一次出現(xiàn)的指定值的索引,如果未找到,返回 -1
str.indexOf(searchValue [, fromIndex])
// fromIndex 默認(rèn)值為 0
Array.prototype.indexOf()
返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在,則返回 -1
arr.indexOf(searchElement[, fromIndex])
解答
String.prototype.indexOf()
解題思路:正則,字符串匹配
function sIndexOf(str, searchStr, fromIndex = 0){
var regex = new RegExp(`${searchStr}`, 'ig')
regex.lastIndex = fromIndex
var result = regex.exec(str)
return result ? result.index : -1
}
// 測(cè)試
var paragraph = 'The quick brown fox jumps over the lazy dog. If the dog barked, was it really lazy?'
var searchTerm = 'dog'
// 測(cè)試一:不設(shè)置 fromIndex
console.log(sIndexOf(paragraph, searchTerm))
// 40
console.log(paragraph.indexOf(searchTerm));
// 40
// 測(cè)試二:設(shè)置 fromIndex
console.log(sIndexOf(paragraph, searchTerm, 41))
// 52
console.log(paragraph.indexOf(searchTerm, 41));
// 52
測(cè)試成功
Array.prototype.indexOf()
解題思路:遍歷匹配
function aIndexOf(arr, elem, fromIndex = 0){
if(!elem) return -1
for(let i = fromIndex; i < arr.length; i++) {
if(arr[i] === elem) return i
}
return -1
}
// 測(cè)試
var beasts = ['ant', 'bison', 'camel', 'duck', 'bison']
// 測(cè)試一:不設(shè)置 fromIndex
console.log(aIndexOf(beasts, 'bison'))
// 1
console.log(beasts.indexOf('bison'))
// 1
// 測(cè)試二:設(shè)置 fromIndex
console.log(aIndexOf(beasts, 'bison', 2))
// 4
console.log(beasts.indexOf('bison', 2))
// 4
測(cè)試成功
總結(jié)一下
function indexOf(items, item, fromIndex = 0) {
let isArray = Array.isArray(items);
let isString = Object.prototype.toString.call(items) == '[object String]';
if (!isArray && !isString) throw new SyntaxError();
if(isArray) return sIndexOf(items, item, fromIndex)
else return aIndexOf(items, item, fromIndex)
}
你也可以嘗試使用遍歷匹配法解決 sIndexOf 問題(正則更簡(jiǎn)潔),這里不做介紹(和 aIndexOf 差不多的套路,不同的是,String 類型可以一次匹配多個(gè)字符)

來源:https://github.com/sisterAn/JavaScript-Algorithms
最后
評(píng)論
圖片
表情
