Lodash源码阅读-strictIndexOf

Lodash 源码阅读-strictIndexOf

一、介绍

strictIndexOf 是 Lodash 内部使用的一个工具函数,用于在数组中查找某个值的索引位置。与 JavaScript 原生的 indexOf 方法类似,但实现更加简单直接,只进行严格相等(===)比较。

二、源码实现

js 复制代码
function strictIndexOf(array, value, fromIndex) {
  var index = fromIndex - 1,
    length = array.length;

  while (++index < length) {
    if (array[index] === value) {
      return index;
    }
  }
  return -1;
}

三、实现原理

1. 整体思路

这个函数的实现非常直观,采用了最基础的循环遍历方式:

  • 从指定的起始位置开始向后遍历数组
  • 使用严格相等(===)比较每个元素
  • 找到匹配项就返回索引,否则返回 -1

2. 参数说明

  • array:要搜索的数组
  • value:要查找的值
  • fromIndex:开始搜索的位置(索引)

3. 逐行解析

js 复制代码
var index = fromIndex - 1,
  length = array.length;
  • 将起始索引减 1,因为后面会使用前置递增运算符(++)
  • 缓存数组长度,避免重复获取
js 复制代码
while (++index < length) {
  • 使用 while 循环遍历数组
  • 使用前置递增运算符,确保从 fromIndex 位置开始比较
js 复制代码
if (array[index] === value) {
  return index;
}
  • 使用严格相等运算符比较当前元素和目标值
  • 如果找到匹配项,立即返回当前索引
js 复制代码
return -1;
  • 循环结束后仍未找到匹配项,返回 -1

四、使用示例

js 复制代码
const arr = [1, 2, 3, 4, 5];

// 基本使用
console.log(strictIndexOf(arr, 3, 0)); // 输出:2
console.log(strictIndexOf(arr, 6, 0)); // 输出:-1

// 从指定位置开始搜索
console.log(strictIndexOf(arr, 3, 3)); // 输出:-1
console.log(strictIndexOf(arr, 4, 3)); // 输出:3

// 严格相等比较
console.log(strictIndexOf([1, "2", 3], "2", 0)); // 输出:1
console.log(strictIndexOf([1, 2, 3], "2", 0)); // 输出:-1

五、与原生 indexOf 的区别

兼容性考虑 :Lodash 作为一个跨浏览器兼容性库,自己实现 strictIndexOf 而不是使用原生 indexOf 主要是出于以下兼容性原因:早期 JavaScript 环境(如 IE8 及以下)不支持 Array.prototype.indexOf

六、实际应用场景

  1. 数组去重:可以用于检查元素是否已存在
  2. 数组查找:在需要严格相等比较的场景中查找元素位置
  3. 数组分割:结合其他操作,可用于数组的分割和处理

七、总结

strictIndexOf 是一个简单但高效的数组查找工具函数,通过严格相等比较来查找数组元素。它的实现简单直接,没有太多额外的边界条件处理,这使得它在特定场景下性能表现优异。

相关推荐
龙在天几秒前
LeetCode题解——两数相加
前端
不如摸鱼去16 分钟前
uni-app 网络请求终极选型:uni.request、axios、uni-network、alova 谁才是你的真命请求库?
前端·小程序·uni-app
乐潇游23 分钟前
从零搭建 Vite + React + Tailwind CSS 企业级应用
前端·react.js·vite
二闹23 分钟前
前端大文件断点续传和分片续传
前端
掘金011 小时前
震惊!Vue3 竟能这样写?React 开发者狂喜的「Vue-React 缝合怪」封装指南
javascript·vue.js·react.js
Lsx_1 小时前
分不清RAG 、Function Call、MCP、Agent?一文秒懂它们的区别和联系
前端·agent·mcp
毕了业就退休1 小时前
websocket 的心跳机制你知道几种
前端·javascript·http
子林super1 小时前
aiforcast集群单节点CPU使用率100%问题
前端
CF14年老兵1 小时前
为什么 position: absolute 在 Flexbox 里会失效?
前端·css·trae
Juchecar1 小时前
TypeScript 与 JavaScript 的关系及学习建议
javascript