filter 返回新数组,保留回调返回真值的元素,不修改原数组;支持数字、类型、对象属性筛选及链式调用,需注意空值处理和避免副作用。

filter 是 JavaScript 数组上最常用的方法之一,它会遍历数组每一项,返回一个**新数组**,里面只包含让回调函数返回 true 的元素,原数组不会被修改。
filter 的基本用法
语法很简单:arr.filter(callback),其中 callback 接收三个参数:当前元素、索引、原数组(后两个通常可省略)。只要 callback 返回真值,对应元素就会被保留。
- 回调函数必须有返回值,且应为布尔类型(或能转为布尔的值)
- filter 不改变原数组,总是返回一个新数组(哪怕为空)
- 如果没匹配到任何元素,返回空数组
[]
筛选数字型数据
比如从一串数字中挑出大于 10 的数:
const numbers = [5, 12, 8, 20, 3]; const bigNumbers = numbers.filter(n => n > 10); // [12, 20]
也可以结合 isNaN 或 typeof 做类型过滤:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
const mixed = [1, 'hello', 42, null, undefined, 3.14]; const numbersOnly = mixed.filter(item => typeof item === 'number' && !isNaN(item)); // [1, 42, 3.14]
筛选对象数组
实际开发中更常见的是对对象数组按属性筛选。例如找所有状态为 active 的用户:
const users = [
{ id: 1, name: 'Alice', status: 'active' },
{ id: 2, name: 'Bob', status: 'inactive' },
{ id: 3, name: 'Charlie', status: 'active' }
];
const activeUsers = users.filter(user => user.status === 'active');
// [{ id: 1, name: 'Alice', ... }, { id: 3, name: 'Charlie', ... }]
支持链式调用,比如先筛选再取名:
const activeNames = users .filter(u => u.status === 'active') .map(u => u.name); // ['Alice', 'Charlie']
注意容易踩的坑
filter 本身不处理“空值跳过”逻辑——undefined、null、NaN 等会被正常传入回调,需手动判断。
- 别在 filter 里写副作用(比如修改外部变量或调 API),它只负责“筛选”,不是 for 循环替代品
- 不要误用
==做比较,尤其涉及null或0时,优先用=== - 如果需要“找第一个满足条件的元素”,用
find();需要“找索引”,用findIndex(),别硬套 filter
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










