当前位置:首页 > JavaScript

js实现indexof

2026-04-07 01:44:44JavaScript

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 方法经过高度优化,性能通常优于手动实现。在大多数情况下,建议直接使用原生方法。

性能对比示例:

js实现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 或超出范围的情况。
  • 对于复杂对象的查找,可能需要深度比较或其他逻辑。

标签: jsindexof
分享给朋友:

相关文章

js实现继承

js实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…