JavaScript嵌套对象过滤:统计未成年宾客数量求助
计算未成年宾客数量的问题解决思路
你的代码存在几个关键问题,导致无法得到正确结果,下面逐一说明并给出修正方案:
问题分析
- 硬编码数据覆盖了参数:你在函数内部定义了
guests对象,但函数参数是guest(命名也不符合要求,应该和传入参数名统一为guests),这会导致函数永远只计算你写死的那组数据,完全忽略外部传入的参数,违背了题目的核心要求。 - 错误的属性判断逻辑:在
for...in循环里,Object.values(guests)返回的是所有宾客对象组成的数组,直接和18做比较是无效操作,你需要获取当前遍历到的具体宾客的age属性来判断。 - 判断条件不符合需求:题目要求返回“未满18岁”的宾客数量,应该用
age < 18,而不是<=18(年满18岁不属于未成年范畴)。
修正后的代码
function howManyMinors(guests) { let minors = 0; // 遍历对象的每个键(宾客名称) for (const guestName in guests) { // 获取当前宾客的年龄 const guestAge = guests[guestName].age; if (guestAge < 18) { minors++; } } return minors; } // 测试用例 const sampleGuests = { Luna: {age: 25}, Sebastian: {age: 7}, Mark: {age: 34}, Nick: {age: 15} }; console.log(howManyMinors(sampleGuests)); // 输出2,符合预期
更简洁的实现方式
如果你习惯用数组方法,可以用Object.values提取所有宾客对象,再通过filter筛选出未成年,最后取结果长度:
function howManyMinors(guests) { return Object.values(guests) .filter(guest => guest.age < 18) .length; }
内容的提问来源于stack exchange,提问作者Esteban Descouvieres
相关产品推荐
相关产品推荐

