课程作业isPartyViable函数测试失败:满足条件却返回false
问题:isPartyViable函数在条件满足时无法返回true
场景说明
派对可举办需同时满足两个条件:
- 至少有5人出席
- 随喜购票总收入至少达到£100
isPartyViable函数接收宾客对象数组作为参数,每个对象包含paidForTicket属性(代表宾客愿意支付的购票金额),当两个条件都满足时返回true,否则返回false。
我的代码
function isPartyViable(guests) { let totalMoney = 0; let totalGuests = 0; for (let key in guests){ totalMoney += guests[key].paidForTickets totalGuests += 1 } if (totalMoney >= 100 && totalGuests >= 5 ){ return true } return false }
测试反馈
3个测试通过,1个测试失败
出席人数不足时返回false
✓ 做得好!出席人数不足但筹款足够时返回false
✓ 做得好!购票筹款不足时返回false
✓ 做得好!宾客数足够且筹款足够时返回true
✕ AssertionError: expected false to equal true
问题修复
你的代码存在两个关键错误:
- 属性名拼写错误:场景中明确宾客对象的属性是
paidForTicket,但代码中误写为paidForTickets(多了末尾的s),导致totalMoney累加时始终为NaN,无法满足totalMoney >=100的条件。 - 宾客数统计冗余且有风险:用
for...in遍历数组并累加totalGuests,不如直接使用数组的length属性获取宾客数量,既简洁又避免遍历到非元素属性的风险。
修复后的代码:
function isPartyViable(guests) { const totalGuests = guests.length; let totalMoney = 0; for (const guest of guests) { totalMoney += guest.paidForTicket; } return totalGuests >= 5 && totalMoney >= 100; }
或者用更简洁的数组reduce方法计算总金额:
function isPartyViable(guests) { const totalGuests = guests.length; const totalMoney = guests.reduce((sum, guest) => sum + guest.paidForTicket, 0); return totalGuests >= 5 && totalMoney >= 100; }
内容的提问来源于stack exchange,提问作者Muhammad Yaseen
相关产品推荐
相关产品推荐

