如何使用Flat/flatMap处理员工数组,筛选薪资低于5000的员工信息
如何用flat/flatMap扁平化数组并筛选薪资低于5000的员工?
问题场景
需要筛选出薪资低于5000的员工信息,尝试结合flat和filter实现,但编写的代码存在问题,具体代码如下:
const employeeData = [{ name: "Suresh", salary: 7500 }, { name: "Aman", salary: 3400 }, { name: "Munish", salary: 10000 }, { name: "Chad", salary: 12000 }, { name: "Naveen", salary: 9500 }]; const flattendEmpdata = employeeData.flat((name, salary) => [name, employeeData[salary]]);
修正后正确期望输出:{name: "Aman", salary: 3400}
代码问题分析
- 数组无需扁平化:当前
employeeData是一维数组,flat函数仅用于处理嵌套数组(比如二维、三维数组),此处完全用不上。 - flat用法错误:
flat的参数是扁平化的深度(比如flat(1)处理二维数组),不接受回调函数;带回调的扁平化操作要使用flatMap。 - 期望输出错误:Suresh的薪资为7500,不满足“低于5000”的条件,正确结果仅包含Aman的信息。
正确实现方式
场景1:一维数组直接筛选(最简便)
因为数据本身是一维的,直接用filter就能完成筛选,不需要扁平化:
const employeeData = [{ name: "Suresh", salary: 7500 }, { name: "Aman", salary: 3400 }, { name: "Munish", salary: 10000 }, { name: "Chad", salary: 12000 }, { name: "Naveen", salary: 9500 }]; // 筛选薪资低于5000的员工 const lowSalaryEmployees = employeeData.filter(emp => emp.salary < 5000); console.log(lowSalaryEmployees); // 输出: [{name: "Aman", salary: 3400}]
场景2:嵌套数组下用flat/flatMap处理
如果员工数据是嵌套结构(比如按部门分组的二维数组),才需要结合扁平化和筛选:
// 示例嵌套数组 const nestedEmployeeData = [ [{name: "Suresh", salary: 7500}, {name: "Aman", salary: 3400}], [{name: "Munish", salary: 10000}], [{name: "Chad", salary: 12000}, {name: "Naveen", salary: 9500}] ]; // 方式1:flat + filter const lowSalaryEmp1 = nestedEmployeeData.flat().filter(emp => emp.salary < 5000); // 方式2:flatMap(等价于map + flat(1),直接在映射时完成筛选) const lowSalaryEmp2 = nestedEmployeeData.flatMap(group => group.filter(emp => emp.salary < 5000) ); console.log(lowSalaryEmp1); // 输出: [{name: "Aman", salary: 3400}] console.log(lowSalaryEmp2); // 输出同上
关键知识点
flat:仅用于嵌套数组的扁平化,参数为扁平化深度,无回调参数。flatMap:是map+flat(1)的组合,适合先对数组元素做映射(比如筛选),再自动扁平化一层的场景。- 一维数组筛选直接用
filter即可,无需多余的扁平化操作。
内容的提问来源于stack exchange,提问作者mohit_pamma
相关产品推荐
相关产品推荐

