js indexof 实现
实现 JavaScript 的 indexOf 方法
indexOf 是 JavaScript 中用于查找字符串或数组中指定元素首次出现位置的方法。以下是自定义实现方案:
字符串的 indexOf 实现
function customStringIndexOf(str, searchValue, fromIndex = 0) {
if (fromIndex < 0) fromIndex = 0;
if (fromIndex >= str.length) return -1;
for (let i = fromIndex; i < str.length; i++) {
if (str[i] === searchValue[0]) {
let match = true;
for (let j = 0; j < searchValue.length; j++) {
if (str[i + j] !== searchValue[j]) {
match = false;
break;
}
}
if (match) return i;
}
}
return -1;
}
数组的 indexOf 实现
function customArrayIndexOf(arr, searchElement, fromIndex = 0) {
if (fromIndex < 0) fromIndex = Math.max(0, arr.length + fromIndex);
for (let i = fromIndex; i < arr.length; i++) {
if (arr[i] === searchElement) return i;
}
return -1;
}
关键特性说明
字符串实现需要处理子串匹配情况,当找到第一个字符匹配时需要检查后续字符是否完全匹配。
数组实现相对简单,只需遍历数组找到第一个严格相等的元素即可。
两个实现都支持可选的起始位置参数,当起始位置为负数时会按照规范进行特殊处理。
使用示例
console.log(customStringIndexOf("hello world", "world")); // 6
console.log(customArrayIndexOf([1, 2, 3, 4], 3)); // 2
边界情况处理
实现考虑了各种边界情况:

- 起始位置为负数
- 起始位置超出范围
- 搜索值为空字符串
- 未找到匹配项返回-1
这些实现模拟了原生 indexOf 方法的核心功能,可以作为理解底层原理的参考。






