当前位置:首页 > JavaScript

js 实现filter

2026-02-01 12:36:12JavaScript

实现数组的 filter 方法

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

原生方法的使用

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

自定义实现

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 oddNumbers = numbers.myFilter(num => num % 2 !== 0);
console.log(oddNumbers); // 输出: [1, 3, 5]

使用 reduce 实现

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

const numbers = [10, 20, 30, 40];
const filtered = numbers.filterWithReduce(num => num > 25);
console.log(filtered); // 输出: [30, 40]

处理稀疏数组的实现

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

const sparseArray = [1, , 3, , 5];
const filteredSparse = sparseArray.sparseFilter(num => num % 2 === 1);
console.log(filteredSparse); // 输出: [1, 3, 5]

异步过滤实现

Array.prototype.asyncFilter = async function(callback) {
  const results = await Promise.all(this.map(callback));
  return this.filter((_, index) => results[index]);
};

const asyncNumbers = [1, 2, 3, 4];
asyncNumbers.asyncFilter(async num => {
  await new Promise(resolve => setTimeout(resolve, 100));
  return num % 2 === 0;
}).then(filtered => console.log(filtered)); // 输出: [2, 4]

这些实现展示了 filter 方法的不同变体,包括基本实现、使用 reduce 的方法、处理稀疏数组以及异步过滤。每种方法都有其适用的场景,可以根据具体需求选择最合适的实现方式。

js 实现filter

标签: jsfilter
分享给朋友:

相关文章

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https://…

js实现动画

js实现动画

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

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…