find方法返回数组中第一个满足条件的对象,否则返回undefined;它适合查找唯一项,支持复杂条件和嵌套属性,使用时需防范undefined错误。

find 方法用于查找数组中第一个满足条件的对象,返回该对象(若找到),否则返回 undefined。它适合找“唯一项”,因为一旦匹配就停止遍历,不继续往后查。
基本用法:传入回调函数判断条件
回调函数接收当前元素、索引和原数组三个参数,通常只用第一个(当前对象)。返回 true 表示匹配成功。
- 语法:
arr.find(item => condition) - 示例:从用户列表中找 id 为 3 的用户
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' },
{ id: 4, name: 'Diana' }
];
const user = users.find(u => u.id === 3);
console.log(user); // { id: 3, name: 'Charlie' }
注意:find 不会报错,没找到时返回 undefined
直接访问返回值的属性可能触发 Cannot read property 'xxx' of undefined 错误,建议先检查:
- 用可选链操作符(
?.)安全读取:user?.name - 或提前判断:
if (user) { ... } - 需要默认值可用空值合并操作符:
user?.name ?? '未知用户'
和 findIndex、filter 的区别要清楚
-
find→ 返回匹配的对象本身 -
findIndex→ 返回匹配项的索引(适合后续修改原数组) -
filter→ 返回所有匹配项组成的新数组(哪怕只有一项,也是数组)
如果明确只要一个结果且结构是对象,find 最简洁直接。
立即学习“Java免费学习笔记(深入)”;
进阶:支持复杂条件和嵌套属性
回调里可以写任意逻辑,比如按多个字段匹配、忽略大小写、检查嵌套对象等:
- 查找状态为 active 且角色包含 admin 的用户:
users.find(u => u.status === 'active' && u.roles?.includes('admin')) - 模糊匹配名字(忽略大小写):
users.find(u => u.name.toLowerCase().includes('ali'))


















