
filter 方法会遍历数组每一项,对每个元素执行你提供的回调函数;如果回调返回 true,该元素就被保留在新数组中,否则被跳过。它不修改原数组,而是返回一个全新数组。
基本用法:单个条件筛选
比如从数字数组中找出所有偶数:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const evens = numbers.filter(n => n % 2 === 0);
// 结果:[2, 4, 6]
回调函数接收三个参数:当前元素、索引、原数组,常用的是第一个(元素本身)。
常见筛选场景写法
-
字符串包含某文本:
arr.filter(str => str.includes('关键词')) -
对象属性匹配:
users.filter(user => user.age >= 18 && user.active) -
排除空值或假值:
arr.filter(item => item != null && item !== '')(注意item为 0 或 false 时会被过滤掉,需按需调整) -
去重(配合 indexOf):
arr.filter((item, index) => arr.indexOf(item) === index)
注意容易出错的点
- 回调函数必须有返回值,没写 return 或写成
{}(没 return)会导致所有项变成undefined→ 被过滤 - 空数组调用 filter 仍返回空数组,不会报错
- 如果想“找第一个满足条件的元素”,别用 filter,改用 find;如果只关心“是否存在”,用 some
- filter 不支持异步逻辑(不能在回调里 await),如需异步过滤,得先用 Promise.all 处理完数据再 filter
和 for 循环对比的优势
filter 更声明式、可读性强,天然支持链式调用(比如 arr.filter(...).map(...).sort(...))。而手动 for 循环需要自己新建数组、push、控制索引,代码更冗长且易出错。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










