JavaScript数组与对象问题求助:筛选分数大于4的雇主姓名
问题分析
- 错误包装输入数组:函数内
let List = [employers];把传入的雇主数组又嵌套进了一个新数组,导致List变成二维数组,循环无法遍历到单个雇主对象;而且此处错误使用了全局变量employers,而非函数参数employerList。 - 条件判断逻辑错误:
if(List['score'] > 4 )中,List是数组,不存在score属性;即使修正数组包装,也应该访问循环当前元素的score,而非数组本身的属性。 - 返回逻辑不符合需求:
return List[i].name会在第一次循环就终止函数并返回值,即使逻辑正确,也只能返回第一个符合条件的姓名,无法获取所有符合要求的结果;若没有符合条件的对象,函数会返回undefined。
解决指导
基础循环版修正代码
const employers = [ { name: "Adam", score: 5 }, { name: "Jane", score: 3 }, { name: "Lucas", score: 3 }, { name: "Francesca", score: 2 }, { name: "Mason", score: 4 } ] function getQualifiedEmployers(employerList) { const qualifiedNames = []; for (let i = 0; i < employerList.length; i++) { const currentEmployer = employerList[i]; if (currentEmployer.score > 4) { qualifiedNames.push(currentEmployer.name); } } return qualifiedNames; } console.log(getQualifiedEmployers(employers))
修正要点说明
- 直接使用函数参数
employerList,避免错误嵌套数组,确保遍历的是单个雇主对象。 - 循环中取出当前雇主对象,正确访问其
score属性进行条件判断。 - 用数组
qualifiedNames收集所有符合条件的姓名,循环结束后统一返回,保证能获取全部结果。 - 函数命名更贴合功能,
getQualifiedEmployers明确表示返回符合条件的雇主列表。
简洁数组方法版(进阶)
对于JavaScript数组,还可以使用filter和map组合实现更简洁的代码,这也是日常开发中常用的写法:
const employers = [ { name: "Adam", score: 5 }, { name: "Jane", score: 3 }, { name: "Lucas", score: 3 }, { name: "Francesca", score: 2 }, { name: "Mason", score: 4 } ] function getQualifiedEmployers(employerList) { return employerList .filter(employer => employer.score > 4) .map(employer => employer.name); } console.log(getQualifiedEmployers(employers))
进阶代码说明
filter方法:遍历数组,返回所有满足score > 4条件的雇主对象组成的新数组。map方法:将筛选后的每个雇主对象转换为其name属性,最终得到符合条件的姓名数组。
内容的提问来源于stack exchange,提问作者M K
相关产品推荐
相关产品推荐

