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

JS数组查找函数:为何无else版本正常,加else后错误返回-1

JavaScript数组查找函数逻辑异常问题

问题表现

编写数组指定元素查找逻辑时出现不符合预期的返回结果:

  • 未给if语句额外包裹代码块、无配套else分支的findElement函数,可正常返回目标值30
  • 给if语句包裹代码块、新增else分支返回-1后的findElement2函数,执行后错误返回-1

复现代码如下:

let arr = [10, 50, 30, 40, 20];
let n = arr.length;
let key = 30;

function findElement(arr,n,key)
{
    let i;
    for (i = 0; i < n; i++)
        if (arr[i] == key)
            return arr[i];

    return -1;
}

function findElement2(arr, n, key){
  for(let i = 0; i < n; i++){
    if (arr[i] == key) {
      return arr[i];
    }else{
      return -1;
    }
  }
}

console.log(findElement(arr, n, key)); // 预期输出30,实际输出30
console.log(findElement2(arr, n, key)); // 预期输出30,实际输出-1

故障原因

return -1的执行位置错误是核心原因:

  • findElement的return -1写在for循环结构外部:循环会从第一个元素开始逐个比对,只要匹配到目标值就立刻返回对应元素终止函数;只有完整遍历完所有元素、全程没有匹配到目标值时,才会执行循环外的return -1,逻辑符合预期。
  • findElement2的return -1写在for循环内部的else分支中:第一次循环取到索引为0的元素10,和目标值30不相等,会立刻进入else分支执行return -1,函数直接终止,不会继续遍历后续的50、30等元素,相当于永远只检查数组第一个元素,自然无法返回正确结果。

修复方法

将return -1的逻辑移到for循环外部,确保只有全量遍历未找到目标值时才返回-1:

function findElement2Fixed(arr, n, key){
  for(let i = 0; i < n; i++){
    if (arr[i] == key) {
      return arr[i];
    }
  }
  // 所有元素遍历完成未命中目标,才返回-1
  return -1;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:33:28