当前位置:首页 > JavaScript

js filter实现

2026-02-01 16:56:22JavaScript

使用 Array.prototype.filter() 方法

filter() 是 JavaScript 数组的一个内置方法,用于创建一个新数组,包含通过指定函数测试的所有元素。该方法不会改变原数组。

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]

在对象上实现 filter 方法

可以为非数组对象(如类数组对象或自定义对象)实现类似 filter 的功能。

const obj = { a: 1, b: 2, c: 3, d: 4 };

function filterObject(object, callback) {
  const result = {};
  Object.keys(object).forEach(key => {
    if (callback(object[key], key, object)) {
      result[key] = object[key];
    }
  });
  return result;
}

const evenValues = filterObject(obj, value => value % 2 === 0);
console.log(evenValues); // { b: 2, d: 4 }

链式调用 filter 与其他数组方法

filter 可以与其他数组方法(如 mapreduce)结合使用,实现复杂的数据处理。

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

使用 thisArg 参数

filter 方法的第二个参数可以指定回调函数中的 this 值。

const threshold = { min: 2, max: 4 };

function isInRange(value) {
  return value >= this.min && value <= this.max;
}

const numbers = [1, 2, 3, 4, 5];
const filteredNumbers = numbers.filter(isInRange, threshold);
console.log(filteredNumbers); // [2, 3, 4]

处理稀疏数组

filter 方法会跳过稀疏数组中未定义或删除的元素。

js filter实现

const sparseArray = [1, , 3, , 5];
const filteredArray = sparseArray.filter(num => true);
console.log(filteredArray); // [1, 3, 5]

标签: jsfilter
分享给朋友:

相关文章

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js类实现

js类实现

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

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…