当前位置:首页 > JavaScript

js indexof的实现

2026-03-15 17:22:48JavaScript

JavaScript 的 indexOf 实现

JavaScript 的 indexOf 方法用于查找字符串或数组中指定元素的首次出现位置。以下是其实现原理及自定义实现方式。

字符串的 indexOf

String.prototype.indexOf 用于查找子字符串在父字符串中的位置,若未找到返回 -1

自定义实现:

js indexof的实现

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

示例:

const str = "Hello, world!";
console.log(customIndexOf(str, "world")); // 输出: 7

数组的 indexOf

Array.prototype.indexOf 用于查找元素在数组中的位置,若未找到返回 -1

js 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;
}

示例:

const arr = [1, 2, 3, 4, 5];
console.log(arrayIndexOf(arr, 3)); // 输出: 2

关键点说明

  • 字符串匹配:通过双重循环比较子字符串与父字符串的每个字符。
  • 数组匹配:直接遍历数组元素,使用严格相等(===)比较。
  • 负数索引处理:若 fromIndex 为负数,从末尾开始计算位置。

注意事项

  • 原生 indexOf 使用更高效的算法(如 Boyer-Moore),上述实现仅为简化版。
  • 对于大型数据,建议直接使用原生方法以获得更好性能。

标签: jsindexof
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js实现弹框

js实现弹框

使用 alert 实现简单弹框 JavaScript 的 alert 方法可以直接显示一个简单的弹框,内容为纯文本: alert("这是一个简单的弹框"); 使用 confirm 实现确认弹框…