You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript嵌套对象过滤:统计未成年宾客数量求助

计算未成年宾客数量的问题解决思路

你的代码存在几个关键问题,导致无法得到正确结果,下面逐一说明并给出修正方案:

问题分析

  1. 硬编码数据覆盖了参数:你在函数内部定义了guests对象,但函数参数是guest(命名也不符合要求,应该和传入参数名统一为guests),这会导致函数永远只计算你写死的那组数据,完全忽略外部传入的参数,违背了题目的核心要求。
  2. 错误的属性判断逻辑:在for...in循环里,Object.values(guests)返回的是所有宾客对象组成的数组,直接和18做比较是无效操作,你需要获取当前遍历到的具体宾客的age属性来判断。
  3. 判断条件不符合需求:题目要求返回“未满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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 19:10:49