FreeCodeCamp校验传入对象是否包含指定属性的实现问题求助
你的代码存在的问题
- 逻辑方向完全颠倒:需求是主动校验指定的4个属性是否全部存在,但你的代码是遍历传入对象的已有属性,没有对齐校验目标。
- 提前返回导致逻辑不完整:你的循环第一次执行就会触发return语句,仅校验到对象的第一个属性是否存在就直接结束函数,完全不会检查剩余3个要求的属性,自然无法通过缺省任意属性的测试用例。
- 冗余判断+语法不完整:代码中的
if (userObj)判断无实际意义,同时循环、条件判断的闭合括号缺失,存在语法漏洞。
调整建议
你可以直接参考官方的逐属性校验写法,也可以用循环逻辑实现更易扩展的版本,两种写法逻辑等价:
循环实现版本
function isEveryoneHere(userObj) { // 先定义需要校验的属性列表 const requiredNames = ['Alan', 'Jeff', 'Ryan', 'Sarah'] // 遍历校验每一个必填属性是否存在 for (const name of requiredNames) { // 只要有一个不存在就直接返回false if (!userObj.hasOwnProperty(name)) { return false } } // 全部校验通过返回true return true }
更简洁的数组方法版本
function isEveryoneHere(userObj) { return ['Alan', 'Jeff', 'Ryan', 'Sarah'].every(name => userObj.hasOwnProperty(name)) }
内容的提问来源于stack exchange,提问作者goldwind1111
相关产品推荐
相关产品推荐

