filter是JavaScript数组方法,遍历原数组并返回满足条件元素的新数组,不修改原数组;回调函数需返回布尔值,常用参数为当前元素,适用于数字筛选(如n>10)和对象筛选(如u.status===’active’)。

Filter 是 javaScript 数组的一个方法,它会遍历数组每一项,根据你提供的函数返回 true 或 false,只保留返回 true 的元素,生成一个**新数组**,原数组不变。
filter 的基本用法
语法很简单:
const 新数组 = 原数组.filter(回调函数)
回调函数接收三个参数:当前元素、当前索引、原数组,最常用的是第一个(当前元素)。
- 回调函数必须返回布尔值(或能转为布尔值的值)
- 返回
true→ 这个元素被保留在新数组里 - 返回
false→ 这个元素被跳过
筛选数字:比如找出所有大于 10 的数
例子:
立即学习“Java免费学习笔记(深入)”;
const nums = [5, 12, 8, 15, 3]; const bigNums = nums.filter(n => n > 10); // 结果:[12, 15]
这里箭头函数 n => n > 10 对每个数字判断是否大于 10,只有满足条件的才进新数组。
筛选对象:比如找所有状态为 “active” 的用户
例子:
立即学习“Java免费学习笔记(深入)”;
const users = [ { name: '张三', status: 'active' }, { name: '李四', status: 'inactive' }, { name: '王五', status: 'active' } ]; const activeUsers = users.filter(u => u.status === 'active'); // 结果:[{ name: '张三', ... }, { name: '王五', ... }]
注意:filter 不修改原数组,users 保持不变,activeUsers 是全新数组。
常见误区提醒
- filter 不会跳过空位或 undefined:如果数组有空槽(如
[1, , 3]),filter 仍会调用回调(但当前值是undefined),需自行判断 - 返回非布尔值会被强制转换:比如返回
0、''、NULL都算 false;返回对象、非零数、字符串都算 true(但不推荐依赖隐式转换) - 不能中断遍历:filter 总是遍历全部元素,不像 some/every 可提前退出
基本上就这些。filter 的核心就是“留真去假”,写清楚判断逻辑,它就帮你把符合条件的元素挑出来,干净又安全。