当前位置:首页 > JavaScript

js indexof的实现

2026-02-02 17:05:06JavaScript

JavaScript indexOf 的实现原理

JavaScript 的 indexOf 方法用于查找字符串或数组中指定元素的首次出现位置。以下是其核心实现逻辑和注意事项:

字符串的 indexOf 实现

字符串的 indexOf 方法用于查找子字符串的起始位置。以下是简化版的实现思路:

js indexof的实现

function stringIndexOf(str, searchValue, fromIndex = 0) {
  if (fromIndex < 0) fromIndex = 0;
  if (fromIndex >= str.length) return -1;

  for (let i = fromIndex; i < str.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;
}

关键点:

js indexof的实现

  • 处理负的 fromIndex,将其视为 0
  • 双循环嵌套:外层遍历主字符串,内层匹配子字符串。
  • 时间复杂度为 O(n*m),其中 n 是主字符串长度,m 是子字符串长度。

数组的 indexOf 实现

数组的 indexOf 方法用于查找元素的首次出现位置。以下是简化实现:

function arrayIndexOf(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;
}

关键点:

  • 支持负的 fromIndex,从数组末尾开始计算。
  • 使用严格相等(===)比较元素。
  • 时间复杂度为 O(n),n 为数组长度。

边界情况处理

  1. 未找到时返回 -1:无论是字符串还是数组,未找到目标均返回 -1
  2. 空字符串/数组:若搜索值为空,字符串返回 fromIndex,数组返回 -1
  3. fromIndex 超出范围:字符串和数组均返回 -1

性能优化建议

  • 字符串搜索:现代浏览器通常使用 Boyer-Moore 或 KMP 算法优化字符串搜索。
  • 数组搜索:对大型数组,可考虑使用 SetMap 提前建立索引。

示例用法

// 字符串示例
const str = "Hello World";
console.log(stringIndexOf(str, "World")); // 输出 6

// 数组示例
const arr = [1, 2, 3, 4];
console.log(arrayIndexOf(arr, 3)); // 输出 2

标签: jsindexof
分享给朋友:

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现计算器

js实现计算器

实现基础计算器功能 使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例: let currentInput = '0'; let previo…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…