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
相关产品推荐
相关产品推荐

