如何用if语句实现数组查找:找到返回索引,未找到返回-1?代码排查
问题分析与修复
问题根源
- 循环提前终止:你的
for循环只执行第一次迭代就会返回结果。如果第一个元素不等于目标值,else分支直接return -1,循环直接终止,根本不会检查数组后面的元素,自然找不到后面的目标值。 - 返回值格式错误:找到目标时,你返回的是
[nums.indexOf(exist)]——一个包含索引的数组,但需求是返回单个数字索引。而且当前循环的i就是该元素的索引,完全没必要额外调用indexOf。
修复后的代码
function search(nums, target) { for (let i = 0; i < nums.length; i++) { if (nums[i] === target) { return i; // 直接返回当前元素的索引 } } // 遍历完所有元素都没找到目标,才返回-1 return -1; } console.log(search([-1, 0, 3, 5, 9, 12], 9)); // 输出4
修复说明
- 删掉了
else分支的return,让循环可以完整遍历数组的每一个元素 - 找到目标时直接返回循环变量
i,它就是当前匹配元素的索引,简洁高效 - 把
return -1移到循环外部,只有当整个数组都遍历完且没找到目标时,才返回-1,符合需求逻辑
内容的提问来源于stack exchange,提问作者LukeTheDuke
相关产品推荐
相关产品推荐

