当前位置:首页 > JavaScript

实现js filter

2026-02-02 07:10:25JavaScript

实现 JavaScript 的 filter 方法

在 JavaScript 中,filter 是一个常用的数组方法,用于创建一个新数组,包含通过指定函数测试的所有元素。以下是实现 filter 的几种方式:

使用原生 Array.prototype.filter

原生 filter 方法是最简单的实现方式,接受一个回调函数作为参数:

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.filter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]

手动实现 filter 方法

可以手动实现一个 filter 函数,模拟原生行为:

function customFilter(array, callback) {
  const result = [];
  for (let i = 0; i < array.length; i++) {
    if (callback(array[i], i, array)) {
      result.push(array[i]);
    }
  }
  return result;
}

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = customFilter(numbers, num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]

使用 reduce 实现 filter

reduce 也可以用来实现 filter 的功能:

function filterWithReduce(array, callback) {
  return array.reduce((acc, current, index, arr) => {
    if (callback(current, index, arr)) {
      acc.push(current);
    }
    return acc;
  }, []);
}

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = filterWithReduce(numbers, num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]

为数组原型添加自定义 filter 方法

可以为 Array.prototype 添加自定义的 filter 方法(不推荐修改原生原型,仅作演示):

Array.prototype.myFilter = function(callback) {
  const result = [];
  for (let i = 0; i < this.length; i++) {
    if (callback(this[i], i, this)) {
      result.push(this[i]);
    }
  }
  return result;
};

const numbers = [1, 2, 3, 4, 5];
const evenNumbers = numbers.myFilter(num => num % 2 === 0);
console.log(evenNumbers); // [2, 4]

使用生成器实现惰性 filter

生成器可以实现惰性求值的 filter,适用于大数据集:

实现js filter

function* lazyFilter(array, callback) {
  for (const item of array) {
    if (callback(item)) {
      yield item;
    }
  }
}

const numbers = [1, 2, 3, 4, 5];
const filtered = lazyFilter(numbers, num => num % 2 === 0);
console.log([...filtered]); // [2, 4]

注意事项

  • 回调函数接受三个参数:当前元素、当前索引和原数组。
  • filter 不会修改原数组,而是返回一个新数组。
  • 如果没有任何元素通过测试,返回空数组。

标签: jsfilter
分享给朋友:

相关文章

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现目录

js实现目录

实现目录的基本思路 在JavaScript中实现目录功能通常涉及以下几个核心步骤:解析文档中的标题元素(如h1-h6),动态生成目录结构,并添加交互逻辑(如点击跳转)。以下是具体实现方法: 解析标题…

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js实现div隐藏

js实现div隐藏

使用CSS的display属性隐藏div 通过设置元素的display属性为none,可以完全隐藏div元素。这种方法不仅隐藏元素,还会从文档流中移除,不占据页面空间。 document.getEl…