findMyCampsites函数返回undefined 求代码错误排查
代码错误分析与修正
你的findMyCampsites函数返回undefined且功能不符合要求,核心问题如下:
关键错误点
- 多余且错误的嵌套循环:
campgrounds[i].view是字符串类型,partySize和number是数字类型,这些值没有length属性,内层三个循环根本不会执行。遍历营地数组时,直接访问对象属性即可,完全不需要循环这些单个属性。 - 条件逻辑完全搞反:需求要求营地可容纳人数大于等于输入的party size,你写的是
campgrounds[i].partySize[p] <= size,这会筛选出容纳人数不足的营地,完全不符合要求。 - 提前return破坏遍历逻辑:你在循环内的判断分支直接return,导致只检查第一个元素就终止函数。而且
array.push(...)返回的是数组的新长度,不是数组本身,额外拼接逗号也不符合返回格式。另外,只要第一个元素不满足条件就返回提示字符串,根本没遍历完所有营地。 - 无匹配时的返回时机错误:应该等遍历完所有营地、确认没有符合条件的结果后,再返回提示字符串,而非中途遇到不匹配元素就返回。
修正后的代码
基础for循环版本
function findMyCampsites(campgrounds, view, partySize) { const availableCamps = []; // 遍历所有营地 for (const camp of campgrounds) { // 同时校验三个条件:未预订、视图匹配、容纳人数足够 if (!camp.isReserved && camp.view === view && camp.partySize >= partySize) { availableCamps.push(camp.number); } } // 根据结果返回数组或提示文本 return availableCamps.length > 0 ? availableCamps : 'Sorry, no campsites with that view are available to host your party'; }
更简洁的filter+map版本
function findMyCampsites(campgrounds, view, partySize) { // 先筛选符合条件的营地,再提取编号 const availableCamps = campgrounds .filter(camp => !camp.isReserved && camp.view === view && camp.partySize >= partySize) .map(camp => camp.number); return availableCamps.length ? availableCamps : 'Sorry, no campsites with that view are available to host your party'; }
测试验证
用给定的示例数组测试:
let campgrounds = [ { number: 1, view: "ocean", partySize: 8, isReserved: false }, { number: 5, view: "ocean", partySize: 4, isReserved: false }, { number: 12, view: "ocean", partySize: 4, isReserved: true }, { number: 18, view: "forest", partySize: 4, isReserved: false }, { number: 23, view: "forest", partySize: 4, isReserved: true }, ]; console.log(findMyCampsites(campgrounds, "ocean", 4)); // [1, 5] console.log(findMyCampsites(campgrounds, "ocean", 8)); // [1] console.log(findMyCampsites(campgrounds, "forest", 4)); // [18] console.log(findMyCampsites(campgrounds, "forest", 6)); // 'Sorry, no campsites with that view are available to host your party'
内容的提问来源于stack exchange,提问作者Akeem
相关产品推荐
相关产品推荐

