当前位置: 首页 > 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数据采集卡与精密传感器结合,能够对带轮的直径、厚度等多个参数进行高精度测量,并通过比较测量法判定产品合…...

Python程序设计期末考试高频大题精讲:二维列表数据处理实战与深度解析

Python程序设计期末考试高频大题精讲:二维列表数据处理实战与深度解析 摘要:本文以高校计算机科学与技术专业《Python程序设计》期末考试中一道典型大题——“统计学生捐款次数”为切入点,系统讲解二维列表(嵌套列表)的…...

OpenClaw(首选,全能执行) - 支持平台:**WhatsApp、Telegram、微信、企业微信、飞书、Slack、Discord**等15+平台

一、自动处理邮件的AI(过滤、归档、代发、总结) 1. OpenClaw(全能型,本地多平台) 核心能力:垃圾邮件过滤、自动归档、按规则分类、提取待办、代发模板邮件、批量退订、邮件摘要。优势:本地部署、…...

ai辅助部署openclaw:让快马智能适配ubuntu环境与反爬策略

AI辅助部署OpenClaw:让快马智能适配Ubuntu环境与反爬策略 最近在尝试用OpenClaw抓取一些动态加载的网站数据,发现直接部署基础版本根本行不通。目标网站不仅有动态渲染的内容,还设置了各种反爬机制。好在发现了InsCode(快马)平台的AI辅助开发…...

数字IC时序约束实战:深入解析clock_uncertainty的设置策略与后端影响

1. 时钟不确定度的本质与组成 刚入行数字IC设计时,我最头疼的就是时序约束里那些看似相似却又微妙差别的概念。记得第一次看到clock_uncertainty这个参数,我盯着综合报告里的红色违例发了半小时呆。后来才明白,这个参数就像给时钟信号加了&qu…...

SGLang-v0.5.6优化升级:多GPU协同,推理性能大幅提升

SGLang-v0.5.6优化升级:多GPU协同,推理性能大幅提升 1. 引言 在当今大模型应用日益普及的背景下,推理性能优化成为开发者面临的核心挑战之一。SGLang-v0.5.6作为结构化生成语言框架的最新版本,带来了多项关键性改进,…...

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

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

OpenShamrock:零基础搭建QQ智能交互系统完全指南

OpenShamrock:零基础搭建QQ智能交互系统完全指南 【免费下载链接】OpenShamrock A Bot Framework based on Xposed with OneBot11 项目地址: https://gitcode.com/gh_mirrors/op/OpenShamrock 核心价值解析:为什么选择OpenShamrock构建QQ机器人&a…...

保姆级教程:在Ubuntu 20.04上搞定Montreal Forced Aligner (MFA) 2.0安装与验证

保姆级教程:在Ubuntu 20.04上搞定Montreal Forced Aligner (MFA) 2.0安装与验证 语音对齐技术正在成为语音处理领域的基础工具,而Montreal Forced Aligner(MFA)作为当前最流行的开源解决方案,其2.0版本带来了显著的性…...

从零构建STM32 OTA升级系统:BootLoader设计、IAP实现与APP无缝跳转实战

1. 为什么需要OTA升级系统 想象一下你开发的智能硬件产品已经卖出去几千台,突然发现固件有个致命bug需要修复,或者要增加一个用户期待已久的新功能。传统做法是让用户把设备寄回工厂,或者带着设备到维修点刷机——这简直是开发者的噩梦&#…...

保姆级教程:为你的Python Flask/Vue项目配置Nginx HTTPS,并解决SSE流响应卡顿问题

保姆级教程:为你的Python Flask/Vue项目配置Nginx HTTPS,并解决SSE流响应卡顿问题 当你将Python Flask后端与Vue前端项目部署到生产环境时,配置HTTPS是必不可少的安全措施。但许多开发者发现,在启用HTTPS后,原本流畅的…...