当前位置:首页 > 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,适用于大数据集:

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 不会修改原数组,而是返回一个新数组。
  • 如果没有任何元素通过测试,返回空数组。

实现js filter

标签: jsfilter
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现轮播

js实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式…