当前位置:首页 > JavaScript

js indexof 实现原理

2026-02-03 07:38:08JavaScript

JavaScript indexOf 的实现原理

JavaScript 的 indexOf 方法用于在字符串或数组中查找指定元素的首次出现位置。其实现原理基于线性搜索(顺序遍历),以下是具体细节:

字符串的 indexOf

字符串的 indexOf 方法会从指定位置开始,逐个字符比较目标子串与源字符串的匹配情况。如果找到匹配的子串,返回起始索引;否则返回 -1

算法步骤:

  1. 检查输入参数是否合法(如 searchValue 是否为字符串)。
  2. fromIndex 指定的位置开始遍历字符串。
  3. 对于每个起始位置,比较目标子串与源字符串的对应字符。
  4. 如果所有字符匹配,返回当前起始索引。
  5. 遍历结束后未找到匹配项,返回 -1

示例代码模拟实现:

function customIndexOf(str, searchValue, fromIndex = 0) {
  if (searchValue === "") return fromIndex >= str.length ? str.length : Math.min(fromIndex, str.length);
  for (let i = fromIndex; i <= str.length - searchValue.length; i++) {
    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

数组的 indexOf 方法通过严格相等(===)比较元素,返回第一个匹配项的索引。

算法步骤:

  1. fromIndex 开始遍历数组。
  2. 对每个元素使用 === 比较目标值。
  3. 找到匹配项时返回当前索引。
  4. 遍历结束后未找到匹配项,返回 -1

示例代码模拟实现:

js indexof 实现原理

function customArrayIndexOf(arr, searchElement, fromIndex = 0) {
  for (let i = fromIndex; i < arr.length; i++) {
    if (arr[i] === searchElement) return i;
  }
  return -1;
}

性能特点

  • 时间复杂度:最坏情况下为 O(n),需要遍历整个字符串或数组。
  • 优化:现代 JavaScript 引擎(如 V8)会针对长字符串或数组使用更高效的算法(如 Boyer-Moore),但标准实现仍基于线性搜索。

注意事项

  1. 字符串的 indexOf 区分大小写。
  2. 数组的 indexOf 使用严格相等,不适用于深比较或特殊对象。
  3. fromIndex 为负数时,会被视为 length + fromIndex

标签: 原理js
分享给朋友:

相关文章

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…