当前位置: 首页 > news >正文

【前端】JavaScript 中的 filter() 方法的理论与实践深度解析


在这里插入图片描述

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]
本文专栏: 前端

在这里插入图片描述


文章目录

  • 💯前言
  • 💯`filter()` 方法的概念与原理
    • 1. 什么是 `filter()`?
    • 2. 基本工作原理
    • 3. 方法特点
    • 4. 用法格式
      • 参数解析
  • 💯代码案例详解
    • 示例:筛选有效数字并去除 0
    • 代码解析
  • 💯`filter()` 的实际应用场景
    • 1. 数据清洗与过滤
    • 2. 筛选特定条件的对象
    • 3. 与其他数组方法组合使用
  • 💯`filter()` 的性能与优化
    • 1. 回调函数优化
    • 2. 避免重复计算
    • 3. 链式调用注意性能
  • 💯小结


在这里插入图片描述


💯前言

  • 在 JavaScript 的数组操作中,filter() 是一个非常常用且功能强大的方法。它允许我们根据一个回调函数(callback)来筛选数组中的元素,创建一个包含通过测试元素的新数组。通过 filter(),开发者可以更高效地处理数组数据,避免使用传统的循环方式,简化代码结构,提升代码的可读性可维护性
    本文将通过详细的模型解析代码示例以及实用场景,全面剖析 filter() 方法的工作原理使用技巧优化方法。无论你是 JavaScript 初学者还是资深开发者,都可以在本篇文章中找到有价值的信息,帮助你掌握并灵活运用filter()
    JavaScript在这里插入图片描述

💯filter() 方法的概念与原理


1. 什么是 filter()

filter() 方法是数组对象上的一个实用方法,用于根据一个 回调函数 (callback) 来筛选数组元素,并将满足条件的元素组成新数组返回。


2. 基本工作原理

  • 执行逻辑:
    它会对数组中每个元素依次执行回调函数,回调函数会返回一个布尔值(truefalse)。若 回调返回 true,元素将被保留到新数组中;若返回 false,则跳过该元素。

3. 方法特点

  1. 不修改原数组:filter() 不会对原数组产生任何影响,而是返回一个新数组。
  2. 跳过空槽:对于数组中被删除或未初始化的空槽,filter() 会自动跳过它们。
  3. 回调函数参数:回调函数接收三个参数:
    • element:数组中当前正在处理的元素值。
    • index:当前元素的索引值,从 0 开始。
    • array:当前正在操作的原数组。

4. 用法格式

var newArray = arr.filter(callback(element, index, array), thisArg);

参数解析

  1. callback

    • 用于测试每个元素的回调函数。
    • 返回 true 表示元素通过测试并保留,false 表示跳过。
  2. thisArg

    • 可选参数,用于指定执行回调函数时的 this 值。
  3. 返回值

    • 返回一个新数组,包含所有通过测试的元素。
    • 如果没有元素通过测试,则返回一个空数组。

💯代码案例详解


示例:筛选有效数字并去除 0

var arr = [{ id: 15 },{ id: -1 },{ id: 0 },{ id: 3 },{ id: 12.2 },{ id: null },{ id: NaN },{ id: 'undefined' }
];function isNumber(obj) {return obj !== undefined && typeof(obj) === 'number' && !isNaN(obj);
}var arrByID = arr.filter(function(item) {return isNumber(item.id) && item.id !== 0;
});console.log(arrByID);
// 输出:[{ id: 15 }, { id: -1 }, { id: 3 }, { id: 12.2 }]

在这里插入图片描述


代码解析

  1. 输入数组:包含多个对象,每个对象的 id 属性具有不同类型的值(数字、nullNaN 和字符串等)。
  2. isNumber() 函数:通过判断 typeof!isNaN() 确保 id 是有效的数字,并排除 NaNundefined
  3. filter() 筛选:
    • isNumber(item.id) 确保 id 是有效数字。
    • item.id !== 0 排除值为 0 的元素。
  4. 输出结果:
[{ id: 15 }, { id: -1 }, { id: 3 }, { id: 12.2 }]

💯filter() 的实际应用场景


1. 数据清洗与过滤

在实际开发中,数据中可能存在无效值或不需要的值。filter() 可以快速清洗数据,去除无效项:

var data = [1, 2, null, 3, undefined, 0, NaN, 4];
var validData = data.filter(function(item) {return item != null && !isNaN(item) && item !== 0;
});
console.log(validData);
// 输出:[1, 2, 3, 4]

在这里插入图片描述


2. 筛选特定条件的对象

在前端开发中,处理对象数组时,filter() 可以帮助快速筛选满足条件的对象:

var users = [{ name: 'Alice', age: 25 },{ name: 'Bob', age: 17 },{ name: 'Charlie', age: 19 }
];var adults = users.filter(function(user) {return user.age >= 18;
});console.log(adults);
// 输出:[{ name: 'Alice', age: 25 }, { name: 'Charlie', age: 19 }]

在这里插入图片描述


3. 与其他数组方法组合使用

filter() 常与 map()reduce() 等方法结合,形成高效的数据处理流程:

var numbers = [1, 2, 3, 4, 5, 6];
var squaredEvens = numbers.filter(function(num) {return num % 2 === 0; // 筛选偶数}).map(function(num) {return num * num; // 求平方});console.log(squaredEvens);
// 输出:[4, 16, 36]

在这里插入图片描述


💯filter() 的性能与优化


1. 回调函数优化

保持回调函数简洁高效,避免不必要的复杂逻辑或计算,提升执行性能。


2. 避免重复计算

对于复杂的回调逻辑,可以将计算结果缓存,避免重复执行,减少性能消耗。


3. 链式调用注意性能

在链式调用中,多个数组方法连续执行可能影响性能,特别是对大数组的操作时需要优化代码结构。


💯小结

  • 在这里插入图片描述
    filter() 是 JavaScript 数组方法中一颗闪亮的明珠,它让数据筛选变得简单而优雅。通过 filter(),我们可以轻松过滤数组中的元素,提取所需数据,而无需编写复杂的循环代码。
    本文详细介绍了 filter()工作原理使用格式实际应用场景以及性能优化技巧。从基本概念代码示例,再到实用场景,全面剖析了 filter() 的核心逻辑和应用价值。
    掌握 filter() 不仅能让你的代码更简洁高效,还能提升你对 JavaScript 数组操作的理解和掌控能力。希望本文对你有所帮助,欢迎在实际开发中灵活运用 filter(),并与其他数组方法结合,创造出高效优雅的代码!

在这里插入图片描述


相关文章:

【前端】JavaScript 中的 filter() 方法的理论与实践深度解析

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯filter() 方法的概念与原理1. 什么是 filter()?2. 基本工作原理3. 方法特点4. 用法格式参数解析 💯代码案例详解示例:筛选有效数字并…...

【机器学习算法】——决策树之集成学习:Bagging、Adaboost、Xgboost、RandomForest、XGBoost

集成学习 **集成学习(Ensemble learning)**是机器学习中近年来的一大热门领域。其中的集成方法是用多种学习方法的组合来获取比原方法更优的结果。 使用于组合的算法是弱学习算法,即分类正确率仅比随机猜测略高的学习算法,但是组合之后的效果仍可能高于…...

JVM运行时数据区内部结构

VM内部结构 对于jvm来说他的内部结构主要分成三个部分,分别是类加载阶段,运行时数据区,以及垃圾回收区域,类加载我们放到之后来总结,今天先复习一下类运行区域 首先这个区域主要是分成如下几个部分 下面举个例子来解释…...

Navicat for MySQL 查主键、表字段类型、索引

针对Navicat 版本11 ,不同版本查询方式可能不同 1、主键查询 (重点找DDL!!!) 方法(1) :右键 - 对象信息 - 选择要查的表 - DDL - PRIMARY KEY 方法(2&…...

如何在谷歌浏览器中实现自定义主题

在数字化时代,个性化设置已成为提升用户体验的重要一环。对于广泛使用的谷歌浏览器而言,改变默认的浏览器主题不仅能够美化界面,还能在一定程度上提升使用效率和愉悦感。本文将详细介绍如何在谷歌浏览器中实现自定义主题,包括从官…...

visual studio 2022 c++使用教程

介绍 c开发windows一般都是visual studio,linux一般是vscode,但vscode调试c不方便,所以很多情况都是2套代码,在windows上用vs开发方便,在转到linux。 安装 1、官网下载vs2022企业版–选择桌面开发–安装位置–安装–…...

曝光三要素

一光圈 光圈越大,数值越小,画面越亮,背景越模糊 光圈越小,数值越大,画面越暗,背景越清晰 二 快门 快门最主要的作用是控制曝光时间的长短 快门速度的单位是秒,一般用 1秒,1/8秒&am…...

01-2 :PyCharm安装配置教程(图文结合-超详细)

一、PyCharm安装 PyCharm集成开发工具(IDE),是当下全球Python开发者,使用最频繁的工具软件。 绝大多数的Python程序,都是在PyCharm工具内完成的开发。 本篇文章基于PyCharm软件工具进行描述,教你如何安装…...

类OCSP靶场-Kioptrix系列-Kioptrix Level 1

一、前情提要 二、实战打靶 1. 信息收集 1.1. 主机发现 1.2. 端口扫描 1.3 目录爆破 1.4. 敏感信息 2.根据服务搜索漏洞 2.1. 搜索exp 2.2. 编译exp 2.3. 查看exp使用方法,并利用 3. 提权 二、第二种方法 一、前情提要 Kioptrix Level是免费靶场&#x…...

Maven插件打包发布远程Docker镜像

dockerfile-maven-plugin插件的介绍 dockerfile-maven-plugin目前这款插件非常成熟,它集成了Maven和Docker,该插件的官方文档地址如下: 地址:https://github.com/spotify/dockerfile-maven 其他说明: dockerfile是用…...

VisualStudio vsix插件自动加载

本文介绍如何在Visual Studio扩展中实现PackageRegistration,包括设置UseManagedResourcesOnly为true,允许背景加载,并针对C#、VB、F#项目提供自动装载,附官方文档链接。增加以下特性即可…… [PackageRegistration(UseManagedRe…...

Codesoft许可管理

在数字化时代,软件许可管理对于确保企业资产安全、优化成本和提高工作效率至关重要。Codesoft作为一款功能强大的标签设计软件,其许可管理功能同样出色。本文将为您介绍如何进行Codesoft的许可管理,确保您的软件投资得到最大回报。 一、了解…...

Unity3D 3D模型/动画数据压缩详解

前言 在Unity3D项目中,3D模型和动画数据通常占用大量内存和存储空间,有效的数据压缩技术对于提升游戏性能和加载速度至关重要。本文将详细介绍Unity3D中3D模型和动画数据的压缩技术,并提供相关的代码实现。 对惹,这里有一个游戏…...

ffmpeg和ffplay命令行实战手册

文章目录 视频拼接用concat视频分段拼接(ffplay 不可调用seek函数进行seek)给视频添加黑边,让视频填充并居中显示不同分辨率视频分段拼接,并且,设置单个视频的缩放比例和摆放位置视频画中画复杂嵌套用overlay(ffplay 可调用seek函数进行seek)…...

基于MobileNet v2模型的口罩实时检测系统实现

基于kaggle数据集训练的模型其实现结果如下: 代码结构如下: 实时口罩检测器: 从导航栏中的链接“实时的口罩检测器”功能,该系统包含一个实时检测用户是否佩戴口罩的功能。基于图片的口罩检测器: 从另一个导航链接“基…...

NEEP-EN2-2023-Section5PartB

题目 个人答案 The chart depicts the outcomes of a survey conducted in a specific university regarding the acquisition of practical activity in class. The chart illustrates that learning knowledges accounts for 91.3 percent, which is the highest percentage…...

PostgreSQL17.x数据库备份命令及语法说明

PostgreSQL17.x数据库备份命令及语法说明 文章目录 PostgreSQL17.x数据库备份命令及语法说明1. 备份命令1. pg_dump命令参数2. pg_dumpall命令参数 2. pg_dump 备份单库语法3. pg_dumpall 备份所有数据库语法4. 备份案例1. pg_dump单库备份2.pg_dumpall单库备份 4. 备份案例1. …...

Java实现一个带头节点的单链表

什么是单链表? 单链表是一种基础的数据结构,其中每个节点都包含两部分: 数据域:存储节点数据。指针域:存储指向下一个节点的引用。 为什么使用头节点? 头节点的存在简化了操作逻辑: 统一操作…...

【图像配准】方法总结

图像配准(Image registration)就是将不同时间、不同传感器(成像设备)或不同条件下(天候、照度、摄像位置和角度等)获取的两幅或多幅图像进行匹配、叠加的过程,就是找到1幅图像像素到另1幅图像像素间的空间映射关系它已…...

LabVIEW汽车综合参数测量

系统基于LabVIEW虚拟仪器技术,专为汽车带轮生产中的质量控制而设计,自动化测量和检测带轮的关键参数。系统采用PCIe-6320数据采集卡与精密传感器结合,能够对带轮的直径、厚度等多个参数进行高精度测量,并通过比较测量法判定产品合…...

手把手教你用PyTorch复现YOLOv8的Pose Head:从零搭建关键点检测模块

手把手教你用PyTorch复现YOLOv8的Pose Head:从零搭建关键点检测模块 在计算机视觉领域,目标检测与姿态估计的结合正成为工业界和学术界的热点。YOLOv8作为YOLO系列的最新成员,其姿态估计模块(Pose Head)的设计尤为精妙…...

别再死记硬背MVC了!通过Unity连连看实战,我搞懂了数据与UI分离的5个真实好处

从连连看实战看数据与UI分离的五大工程化收益 在游戏开发领域,设计模式常常被视为"高级概念"而被初学者敬而远之。但当我真正在Unity中实现一个简单的连连看游戏时,才深刻体会到MVC模式中数据与UI分离带来的实际价值。这不是教科书上的理论说教…...

砸钱做AI却看不见回报?实测实在Agent,上千位全球高管给出的标准答案

作为深耕B2B企服与AI产品评测领域的“老兵”,我在企服AI产品测评局的一线实操中见过太多令人唏嘘的案例。时间来到2026年4月1日,站在这个节点回望,过去一年全球企业在生成式AI上的投入堪称疯狂——仅美国企业在2025年的花费就预计高达370亿美…...

企业AI定制开发:以工业场景为核心,赋能全行业数智化转型

在人工智能与实体经济深度融合的趋势下,标准化AI产品难以适配企业差异化业务流程,定制化AI开发成为企业数智化转型的关键路径。山东向量空间人工智能科技有限公司依托JBoltAI企业级Java AI应用开发框架,聚焦工业领域AI改造,同时为…...

【应答器】基于matlab应答器特殊区段信息包报文编码仿真【含Matlab源码 15258期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…...

Modbus协议详解:从原理到工业应用实践

1. Modbus协议概述Modbus是一种应用层报文传输协议,由Modicon公司(现为施耐德电气旗下品牌)于1979年开发。作为工业自动化领域最广泛采用的通信协议之一,它定义了控制器设备之间交换信息的通用语言。关键特性:协议标准…...

三星 Infinite AI 葡萄酒冰箱:智能厨房新尝试能否突围?

AI 加持,葡萄酒管理新体验周一,三星推出了 Infinite AI 葡萄酒冰箱,目前仅在韩国有售。这款冰箱采用了“AI 葡萄酒管理器”,借助安装在顶部的“AI 视觉”摄像头,能检测用户放入或取出的酒瓶及位置,还能分析…...

ai辅助cad开发:让快马平台的kimi模型帮你思考和编写参数化设计代码

AI辅助CAD开发:让快马平台的Kimi模型帮你思考和编写参数化设计代码 最近在做一个参数化齿轮生成器的项目,发现用传统方式开发效率很低。后来尝试用InsCode(快马)平台的AI辅助功能,整个过程变得轻松多了。这里分享下我的开发经验,…...

新手福音:用快马平台生成wsl安装ubuntu图文教程,轻松入门linux开发

最近在学Linux开发,发现Windows Subsystem for Linux(WSL)真是个神器,特别是搭配Ubuntu使用,既保留了Windows的便利性,又能体验原汁原味的Linux环境。不过刚开始安装配置时踩了不少坑,后来用Ins…...

Qwen3.5-9B惊艳效果:上传物理实验图→识别仪器→生成操作步骤视频脚本

Qwen3.5-9B惊艳效果:上传物理实验图→识别仪器→生成操作步骤视频脚本 1. 模型能力概览 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,在多模态理解和逻辑推理方面表现出色。这个模型最令人惊艳的能力在于它能够: 准确识别实验仪器&…...