js实现indexof
JavaScript 中实现 indexOf 的方法
原生 indexOf 方法
JavaScript 的数组和字符串原生提供了 indexOf 方法,用于查找元素或子字符串的位置。
数组示例:
const arr = [1, 2, 3, 4, 5];
const index = arr.indexOf(3);
console.log(index); // 输出: 2
字符串示例:
const str = 'Hello World';
const index = str.indexOf('World');
console.log(index); // 输出: 6
自定义 indexOf 实现
如果需要手动实现类似功能,可以通过遍历数组或字符串来实现。
数组自定义实现:
function customIndexOf(arr, searchElement, fromIndex = 0) {
for (let i = fromIndex; i < arr.length; i++) {
if (arr[i] === searchElement) {
return i;
}
}
return -1;
}
const arr = [1, 2, 3, 4, 5];
console.log(customIndexOf(arr, 3)); // 输出: 2
字符串自定义实现:
function customIndexOf(str, searchString, fromIndex = 0) {
if (fromIndex < 0) fromIndex = 0;
if (fromIndex >= str.length) return -1;
for (let i = fromIndex; i <= str.length - searchString.length; i++) {
let match = true;
for (let j = 0; j < searchString.length; j++) {
if (str[i + j] !== searchString[j]) {
match = false;
break;
}
}
if (match) return i;
}
return -1;
}
const str = 'Hello World';
console.log(customIndexOf(str, 'World')); // 输出: 6
性能优化
原生 indexOf 方法经过高度优化,性能通常优于手动实现。在大多数情况下,建议直接使用原生方法。
性能对比示例:

const largeArr = Array(1000000).fill(0).map((_, i) => i);
console.time('nativeIndexOf');
largeArr.indexOf(999999);
console.timeEnd('nativeIndexOf');
console.time('customIndexOf');
customIndexOf(largeArr, 999999);
console.timeEnd('customIndexOf');
注意事项
- 原生
indexOf使用严格相等(===)进行比较。 - 自定义实现时需注意边界条件,如负数的
fromIndex或超出范围的情况。 - 对于复杂对象的查找,可能需要深度比较或其他逻辑。






