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

JS遍历数组仅首个匹配对象number属性被push 第二个未入结果

问题根因

代码存在两处逻辑错误,导致循环无法完成全量遍历:

  • 匹配到第一个符合条件的营地后,你在if判断块内直接执行了return sites,函数会立刻终止,不会继续遍历数组后续元素,因此第二个符合条件的5号营地根本没有被检查到。
  • 你把无匹配结果的返回逻辑写在了for循环的else分支中,只要当前遍历到的单个营地不符合筛选规则,就会直接返回错误提示,完全不会执行后续元素的判断。
修复方法

把结果返回、无匹配提示的逻辑全部移到for循环执行完成之后:

  1. 循环过程中只做符合条件营地的收集,不做任何返回操作
  2. 等所有营地遍历完成后,判断结果数组是否为空:非空则返回营地编号数组,为空则返回无可用营地的提示

修复后的完整代码如下:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:27:08