当前位置:首页 > JavaScript

js实现indexof

2026-03-15 08:16:40JavaScript

js实现indexof

js实现indexof

实现 JavaScript 的 indexOf 方法

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

字符串的 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++) {
    if (str[i] === searchValue[0]) {
      let match = true;
      for (let j = 1; j < searchValue.length; j++) {
        if (str[i + j] !== searchValue[j]) {
          match = false;
          break;
        }
      }
      if (match) return i;
    }
  }
  return -1;
}

数组的 indexOf 实现

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

使用递归实现

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

使用 Array.prototype.reduce 实现

function reduceIndexOf(arr, searchElement, fromIndex = 0) {
  return arr.reduce((acc, curr, idx) => {
    if (idx < fromIndex) return acc;
    if (curr === searchElement && acc === -1) return idx;
    return acc;
  }, -1);
}

注意事项

  • 这些实现与原生 indexOf 方法功能相似,但性能可能不如原生方法。
  • 对于字符串实现,需要考虑子字符串匹配的情况。
  • 数组实现中使用了严格相等比较(===),与原生方法行为一致。

标签: jsindexof
分享给朋友:

相关文章

js如何实现继承

js如何实现继承

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

js实现瀑布流

js实现瀑布流

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

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现dh

js实现dh

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

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let currentY…