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

如何调试这段返回undefined的JavaScript二分查找代码?

二分查找代码调试问题分析

你的代码存在两个关键问题,导致运行后返回undefined:

1. 查找区间的指针更新逻辑完全写反

当中间值arr[mid] < key时,说明目标值在右半区间,应该将low更新为mid + 1(缩小到右半区继续查找);而当arr[mid] > key时,目标值在左半区间,需要将high更新为mid - 1(缩小到左半区继续查找)。你当前的代码把这两个分支的操作搞反了,导致查找方向错误,循环提前结束后无法触发return mid。

2. 未处理查找失败的返回值

循环结束意味着目标值不存在于数组中,但你把return -1注释掉了,函数会默认返回undefined。即使修复了查找逻辑,未找到目标的场景也需要明确返回值。

修复后的代码

function binarySearch(arr, key) {
  let low = 0;
  let high = arr.length - 1;
  let mid;
  while (low <= high) {
    mid = Math.floor((high + low) / 2);
    if (arr[mid] == key) {
      return mid;
    } else if (arr[mid] < key) {
      // 目标在右半区,移动low指针
      low = mid + 1;
    } else {
      // 目标在左半区,移动high指针
      high = mid - 1;
    }
  }
  // 未找到目标,返回-1
  return -1;
}
console.log(binarySearch([2, 3, 4, 10, 40], 10)); // 输出3

修复后运行代码,查找10会正确返回索引3;若查找不存在的值(比如5),会返回-1,不会再出现undefined的情况。

内容的提问来源于stack exchange,提问作者Linh Chi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 19:12:02