JS:不确定函数返回的原因



真的是个新手问题,但为什么我的函数返回-1?函数确实有匹配项,那么为什么函数返回-1而不是索引值呢。如果我删除else语句,它将返回正确的out输出。

let array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let target = 5;
function search() {
for (let i = 0; i < array.length; i++) {
if (array[i] === target) {
console.log(true);
return array.indexOf(array[i]);
} else {
console.log(false);
return -1;
}
}
}
search();

您正在对照目标检查第一个元素(索引i = 0)。如果它们不匹配,则调用return -1return立即存在函数。您可能想将退货放在循环之后。

let array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let target = 5;
function search() {
for (let i = 0; i < array.length; i++) {
if (array[i] === target) {
console.log(true);
return i;
} 
}
console.log(false);
return -1;
}
search();

此外,没有必要在循环中执行array.indexOf,因为如果是array[i] == target,则已经有了正确的索引i

因为它检查循环的第一项。它不匹配,所以返回-1。如果删除else,则If仅与第5项匹配,因此它返回正确的值。

解决方案:

function search() {
return array.indexOf(target);
}

为什么

因为循环在第一次迭代时中断,失败

let array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let target = 5;
function search() {
for (let i = 0; i < array.length; i++) {
console.log('execute',i)
if (array[i] === target) {
console.log(true);
return array.indexOf(array[i]);
} else {
console.log(false);
return -1;
}
}
}
search();

解决方案

您需要将局部变量声明为-1才能运行循环。循环结束后返回局部变量。已经迭代了索引,所以只返回i而不是array.indexOf(array[i])

let array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let target = 5;
function search() {
let res = -1;
for (let i = 0; i < array.length; i++) {
if (array[i] === target) {
res = i
}
}
return res
}
console.log(search());

优化

let array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let target = 5;
function search() {
return array.indexOf(target);
}
console.log(search());

最新更新