当前位置:首页 > JavaScript

js实现indexof功能

2026-02-03 08:30:50JavaScript

js实现indexof功能

实现 JavaScript 的 indexOf 功能

JavaScript 的 indexOf 方法用于返回字符串或数组中指定元素的首次出现位置。以下是手动实现该功能的几种方式:

js实现indexof功能

字符串的 indexOf 实现

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

  for (let i = fromIndex; i < str.length; i++) {
    if (str[i] === searchValue[0]) {
      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 实现

function arrayIndexOf(arr, searchElement, fromIndex = 0) {
  if (fromIndex >= arr.length) return -1;
  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);
}

性能优化版本

对于大型字符串,可以使用更高效的算法如 KMP 算法:

function kmpIndexOf(str, pattern) {
  const lps = computeLPSArray(pattern);
  let i = 0, j = 0;

  while (i < str.length) {
    if (str[i] === pattern[j]) {
      i++;
      j++;
      if (j === pattern.length) return i - j;
    } else {
      if (j !== 0) j = lps[j - 1];
      else i++;
    }
  }
  return -1;
}

function computeLPSArray(pattern) {
  const lps = new Array(pattern.length).fill(0);
  let len = 0, i = 1;

  while (i < pattern.length) {
    if (pattern[i] === pattern[len]) {
      len++;
      lps[i] = len;
      i++;
    } else {
      if (len !== 0) len = lps[len - 1];
      else {
        lps[i] = 0;
        i++;
      }
    }
  }
  return lps;
}

这些实现涵盖了基本功能到高级优化方案,可以根据具体需求选择合适的版本。原生 indexOf 经过高度优化,手动实现主要用于理解原理或特殊场景定制。

标签: 功能js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js钟表实现

js钟表实现

实现JavaScript钟表的基本方法 创建一个简单的JavaScript钟表可以通过以下步骤完成,涵盖数字和模拟两种形式。 数字钟表实现 HTML结构只需一个显示时间的容器: <div i…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选…

js 实现截图

js 实现截图

使用html2canvas库实现截图 html2canvas是一个流行的JavaScript库,可将HTML元素转换为Canvas,进而导出为图片。 安装库: npm instal…