当前位置:首页 > JavaScript

js 实现 find 方法

2026-03-16 00:41:18JavaScript

实现 Array.prototype.find 方法

JavaScript 的 find 方法用于查找数组中第一个满足条件的元素。如果没有找到符合条件的元素,则返回 undefined

基本实现

Array.prototype.myFind = function(callback, thisArg) {
  for (let i = 0; i < this.length; i++) {
    if (callback.call(thisArg, this[i], i, this)) {
      return this[i]
    }
  }
  return undefined
}

使用示例

const array = [5, 12, 8, 130, 44]
const found = array.myFind(element => element > 10)
console.log(found) // 12

实现要点

  • 遍历数组中的每个元素
  • 对每个元素执行回调函数
  • 如果回调函数返回 true,立即返回当前元素
  • 如果遍历结束没有找到符合条件的元素,返回 undefined
  • 支持传递 thisArg 参数指定回调函数的 this

Polyfill 实现

以下是更完整的 polyfill 实现,包含参数校验:

js 实现 find 方法

Array.prototype.myFind = function(callback, thisArg) {
  if (this == null) {
    throw new TypeError('"this" is null or not defined')
  }
  if (typeof callback !== 'function') {
    throw new TypeError(callback + ' is not a function')
  }

  const array = Object(this)
  const length = array.length >>> 0

  for (let i = 0; i < length; i++) {
    if (i in array && callback.call(thisArg, array[i], i, array)) {
      return array[i]
    }
  }
  return undefined
}

性能考虑

  • 使用 for 循环而非 forEach 以便可以提前返回
  • 使用 in 操作符检查稀疏数组
  • 使用 length >>> 0 确保长度为非负整数

标签: 方法js
分享给朋友:

相关文章

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js如何实现继承

js如何实现继承

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

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

java如何调用方法

java如何调用方法

调用方法的基本语法 在Java中,调用方法需要明确方法所属的对象(实例方法)或类(静态方法),并传递必要的参数。语法格式如下: 实例方法:对象名.方法名(参数列表); 静态方法:类名.方法名…

js实现dh

js实现dh

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

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…