JS遍历数组仅首个匹配对象number属性被push 第二个未入结果
问题根因
代码存在两处逻辑错误,导致循环无法完成全量遍历:
- 匹配到第一个符合条件的营地后,你在
if判断块内直接执行了return sites,函数会立刻终止,不会继续遍历数组后续元素,因此第二个符合条件的5号营地根本没有被检查到。 - 你把无匹配结果的返回逻辑写在了
for循环的else分支中,只要当前遍历到的单个营地不符合筛选规则,就会直接返回错误提示,完全不会执行后续元素的判断。
修复方法
把结果返回、无匹配提示的逻辑全部移到for循环执行完成之后:
- 循环过程中只做符合条件营地的收集,不做任何返回操作
- 等所有营地遍历完成后,判断结果数组是否为空:非空则返回营地编号数组,为空则返回无可用营地的提示
修复后的完整代码如下:
const 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 }, ]; function findMyCampsites(campgrounds, view, partySize){ let sites = [] const targetView = view.toLowerCase() for (let i = 0; i < campgrounds.length; i++){ const current = campgrounds[i] if (!current.isReserved && current.view === targetView && current.partySize >= partySize) { sites.push(current.number) } } return sites.length ? sites : 'Sorry, no campsites with that view are available to host your party' } console.log(findMyCampsites(campgrounds, 'ocean', 4)) // 输出 [1, 5]
逻辑说明
传入'ocean'、4人团队参数时,修复后的代码会遍历全部5条营地数据:
- 1号营地:未预订、海景、可容纳8人满足4人需求,加入结果
- 5号营地:未预订、海景、可容纳4人满足需求,加入结果
- 12号营地:已预订,跳过
- 18号营地:景观为森林,不符合要求,跳过
- 23号营地:已预订且为森林景观,跳过
最终返回结果和预期的[1,5]完全一致。
内容的提问来源于stack exchange,提问作者Xander Juneau
相关产品推荐
相关产品推荐

