javascript如何过滤数组_怎样使用filter方法【教程】
技术百科
夢幻星辰
发布时间:2026-01-28
浏览: 次 filter返回满足条件的新数组且不修改原数组,但需确保回调明确返回布尔值,避免隐式返回或非布尔值导致过滤失效;推荐用箭头函数处理this绑定;查找单个元素应优先使用find而非filter。
filter 方法能直接返回满足条件的新数组,不修改原数组,但容易因返回值非布尔类型导致意外结果。
filter 的回调函数必须明确返回布尔值
常见错误是忘记 return,或返回了对象、字符串、数字等“真值”,导致过滤失效。JavaScript 会把非 false、0、""、null、undefined、NaN 的值都当作 true 处理。
正确写法示例:
const nums = [1, 2, 3, 4, 5]; const evens = nums.filter(n => n % 2 === 0); // ✅ 返回布尔表达式 // → [2, 4]
错误写法示例:
立即学习“Java免费学习笔记(深入)”;
nums.filter(n => { n % 2 === 0 }); // ❌ 没有 return,隐式返回 undefined
nums.filter(n => n % 2); // ❌ 返回 1/0,0 被当 false,但 1/3/5 都是 true → 留下奇数
filter 中 this 绑定问题与箭头函数选择
如果回调需要访问外部上下文(比如类实例属性),用普通函数时需注意 this 指向;箭头函数自动继承外层 this,更安全。
- 使用箭头函数:直接访问外层变量,无需额外绑定
- 使用
function:若依赖this,需传入第二个参数thisArg,或提前.bind(this) - 多数场景推荐箭头函数,简洁且不易出错
示例:
class UserList {
constructor(users) {
this.adminOnly = true;
this.users = users;
}
getActiveAdmins() {
return this.users.filter(u => u.active && (this.adminOnly ? u.role === 'admin' : true));
}
}
filter 不适合做“查找唯一项”或“提前终止”
filter 总是遍历整

find;若只需判断是否存在,用 some;若要找索引,用 findIndex。
-
arr.filter(x => x.id === 123)[0]→ 效率低,且可能报错(空数组取[0]是undefined) - 应改用:
arr.find(x => x.id === 123) - 若需多个字段筛选,注意避免在回调里重复计算——可先提取条件变量
嵌套对象或数组的深层过滤要手动递归或组合方法
filter 本身只作用于当前层级。遇到如 users.map(u => ({...u, posts: u.posts.filter(p => p.published)})) 这类需求,得手动嵌套调用,不能指望单个 filter 自动穿透。
常见疏漏点:
- 误以为
filter支持路径字符串(如'posts.published')→ 实际不支持,需解构或用lodash.filter等工具库 - 对
null或undefined的posts字段未做保护,直接调用.filter()报错 - 深层过滤后没处理“过滤完为空数组”的情况(比如要不要剔除整条 user?)
安全写法示例:
users.filter(u => u.posts && Array.isArray(u.posts) && u.posts.some(p => p.published));
真正难的不是调用 filter,而是想清楚“我要保留什么”——边界条件、空值、嵌套结构、性能预期,这些地方一不留神就埋雷。
# 都是
# 第一个
# 我要
# 只需
# 绑定
# 工具
# 递归
# 对象
# javascript
# java
# 字符串
# 报错
# function
# this
# 回调
# NULL
# 继承
# map
# 布尔
# 回调函数
# undefined
# Filter
# 布尔值
# 布尔类型
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- Win10怎么创建桌面快捷方式 Win10为应用创
- Win11任务栏怎么固定应用 Win11将软件图标
- Mac的访达(Finder)怎么用_Mac文件管理
- Win11怎么查看局域网电脑_Windows 11
- Linux如何安装JDK11_Linux环境变量配
- Python模块的__name__属性如何由导入方
- Mac如何修复应用程序权限问题_Mac磁盘工具修复
- Python面向对象实战讲解_类与设计模式深入理解
- PHP主流架构怎么集成Redis缓存_配置步骤【方
- Win11怎么设置桌面图标间距_Windows11
- Windows蓝屏错误0x0000001E怎么修复
- Win11用户账户控制怎么关_Win11关闭UAC
- Windows10电脑怎么设置虚拟光驱_Win10
- php485函数怎么捕获异常_php485错误处理
- c++中的可变参数模板(variadic temp
- php485函数执行慢怎么优化_php485性能提
- Windows Defender扫描失败怎么办_安
- Win11时间怎么同步到原子钟 Win11高精度时
- Win11如何设置电源计划_Win11电源计划优化
- Win11怎么关闭触摸屏_禁用Win11笔记本触摸
- Win11无法安装软件怎么办_Win11解除应用安
- 如何使用Golang安装API文档生成工具_快速生
- Windows10系统怎么查看设备管理器_Win1
- Windows10电脑怎么设置虚拟内存_Win10
- c++23 std::expected怎么用 c+
- MAC怎么用连续互通相机里的“桌上视角”_MAC在
- Win11怎么关闭通知中心_Windows11系统
- php订单日志怎么记录发货_php记录订单发货操作
- Win11视频默认播放器怎么改_Win11关联第三
- phpstudy本地环境mysql忘记密码_重置m
- mac怎么安装字体_MAC添加第三方字体与字体册管
- Win11麦克风没声音怎么设置_Win11麦克风权
- Win10怎样安装PPT模板_Win10安装PPT
- Win11资源管理器卡顿怎么办 Win11文件资源
- 如何使用Golang理解结构体指针方法接收者_Go
- 如何在Golang中使用内置函数_Golangle
- php打包exe如何加密代码_防反编译保护方法【技
- Win11怎么设置闹钟_Windows 11时钟应
- Win10系统映像怎么恢复 Win10使用系统映像
- Win11怎么关闭透明效果_Windows11个性
- PyTorch DDP 多进程训练在 Kaggle
- c++怎么操作redis数据库_c++ hired
- 电脑的“网络和共享中心”去哪了_Windows 1
- php怎么连接数据库_MySQL数据库连接的基础代
- 如何在Golang中实现WebSocket广播_使
- 如何在Golang中处理二进制数据_Golang
- Win11怎么开启HDR模式_Windows 11
- 如何在Golang中指定模块版本_使用go.mod
- Windows如何使用BitLocker To G
- Windows任务计划服务异常原因_任务调度失败的

QQ客服