真的是个新手问题,但为什么我的函数返回-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 -1
。return
立即存在函数。您可能想将退货放在循环之后。
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());