Filter是javaScript数组方法,创建新数组保留回调函数返回true的元素,不修改原数组;回调函数接收element、index、Array三个参数,常用于数字、对象、字符串等过滤场景。

filter 是 javascript 数组的内置方法,用来创建一个新数组,其中包含所有通过指定条件(回调函数)的元素。它不会修改原数组,而是返回符合条件的元素组成的新数组。
filter 的基本用法
语法很简单:array.filter(callback(element, index, array))。回调函数接收三个参数:
- element:当前遍历的元素(必填)
- index:当前元素的索引(可选)
- array:原数组本身(可选)
只要回调函数返回 true,该元素就会被保留在新数组中;返回 false 或其他假值则被过滤掉。
常见过滤场景示例
过滤数字数组:比如只保留大于 10 的数
立即学习“Java免费学习笔记(深入)”;
const nums = [5, 12, 8, 20, 3];
const bigNums = nums.filter(n => n > 10); // [12, 20]
过滤对象数组:比如筛选状态为 “active” 的用户
const users = [
{ id: 1, name: ‘张三’, status: ‘active’ },
{ id: 2, name: ‘李四’, status: ‘inactive’ },
{ id: 3, name: ‘王五’, status: ‘active’ }
];
const activeUsers = users.filter(u => u.status === ‘active’);
配合 includes 或 indexOf 做关键词过滤:比如找出包含某个字符的字符串
const words = [‘apple’, ‘banana’, ‘cherry’];
const hasA = words.filter(w => w.includes(‘a’)); // [‘apple‘, ‘banana’]
注意点和易错细节
- filter 不会跳过空位(如
[1, , 3]中的空项),但会把undefined当作真实值处理——是否保留取决于你的判断逻辑 - 如果回调函数没写 return,或返回了
undefined,等价于false,该元素会被过滤掉 - 想过滤掉
NULL、undefined、0、false、''等假值?可以简写为arr.filter(Boolean) - filter 不能中断循环(不像 some/every),它总会遍历全部元素
filter 和 for 循环的区别
用 for 循环也能实现类似效果,但 filter 更声明式、更简洁、更不易出错。它强调“我要什么”,而不是“我怎么一步步拿”。适合逻辑清晰、条件明确的筛选场景。
基本上就这些。用熟了 filter,处理数组筛选就变得很自然。