js实现indexof


实现 JavaScript 的 indexOf 方法
在 JavaScript 中,indexOf 方法用于查找字符串或数组中指定元素的首次出现位置。以下是手动实现该功能的几种方式。
字符串的 indexOf 实现
function customIndexOf(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 = 1; 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;
}
使用递归实现
function recursiveIndexOf(str, searchValue, fromIndex = 0) {
if (fromIndex >= str.length) return -1;
if (str.slice(fromIndex, fromIndex + searchValue.length) === searchValue) {
return fromIndex;
}
return recursiveIndexOf(str, searchValue, fromIndex + 1);
}
使用 Array.prototype.reduce 实现
function reduceIndexOf(arr, searchElement, fromIndex = 0) {
return arr.reduce((acc, curr, idx) => {
if (idx < fromIndex) return acc;
if (curr === searchElement && acc === -1) return idx;
return acc;
}, -1);
}
注意事项
- 这些实现与原生
indexOf方法功能相似,但性能可能不如原生方法。 - 对于字符串实现,需要考虑子字符串匹配的情况。
- 数组实现中使用了严格相等比较(
===),与原生方法行为一致。






