ES6 提供 find、findIndex、includes 和 flat 等方法简化数组操作:find/findIndex 按条件查找元素,includes 可靠判断存在性(支持 NaN),flat 一键扁平化嵌套数组,兼容场景可用 Array.from + reduce 替代。

ES6 提供了更直观、语义清晰的数组查找和扁平化方法,不用写循环、不依赖 indexOf 或手写递归,代码更短也更可靠。
快速查找:find 和 findIndex 最常用
当你需要按条件找元素(不只是精确值),find() 和 findIndex() 是首选:
-
find() 返回第一个匹配的元素,没找到返回
undefined; -
findIndex() 返回对应索引,没找到返回
-1; - 两者都支持箭头函数,逻辑一目了然,比如
arr.find(x => x.id === 5)或users.findIndex(u => u.status === 'active'); - ES2022 还新增了 findLast() 和 findLastIndex(),从末尾开始查,适合处理“最新一条”这类场景。
判断是否存在:includes 比 indexOf 更靠谱
includes() 是查找原始值的快捷方式,尤其适合布尔判断:
- 返回
true/false,语义明确; - 能正确识别
NaN,而indexOf(NaN)总是-1; - 支持第二个参数指定起始位置,类似
indexOf的第三个参数。
一键扁平化:flat() 是最简方案
处理嵌套数组,flat() 几乎覆盖所有日常需求:
立即学习“Java免费学习笔记(深入)”;
-
arr.flat(1)展开一层; -
arr.flat(Infinity)彻底拍平为一维; - 它会自动跳过空槽(sparse array 中的 empty 元素),且不修改原数组;
- 配合
flatMap()可以边映射边扁平,比如arr.flatMap(x => x.items || [])提取所有子项。
兼容性兜底:Array.from + reduce 也能灵活实现
如果需支持较老环境,或要自定义扁平逻辑(如只展开对象里的某字段):
- 用
Array.from()把类数组转成真数组再操作; - 用
reduce()手动递归扁平:arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), []); - 但日常开发中,优先用
flat(),简洁、可读、不易出错。


















