用最简洁代码实现 indexOf 方法
indexOf 有两种:
String.prototype.indexOf()
// 返回从 fromIndex 处开始搜索第一次出现的指定值的索引,如果未找到,返回 -1
// fromIndex 默认值为 0
str.indexOf(searchValue [, fromIndex])
Array.prototype.indexOf()
// 返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回 -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;
}
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;
}
合二为一
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);
}
网友评论