我试图在JavaScript中重新创建indexOf函数。我不能让返回-1部分工作,但其他部分工作得很好。似乎我的for循环的末尾没有运行,因为我试图打印出&;end of loop&;。我也有一些测试代码和下面的输出。如有任何帮助,不胜感激。
Array.prototype.myIndexOf = function(...args) {
if(args[1] === undefined){
for(let i = 0; i < this.length; i++){
if(this[i] === args[0]){
return i;
}
}
} else {
for(let i = args[1]; i < this.length; i++){
if(this[i] === args[0]){
return i;
}
}
console.log("end of loop")
return -1;
}
};
// TEST
const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
console.log(beasts.indexOf('bison'));
console.log(beasts.myIndexOf('bison'));
// expected output: 1
// start from index 2
console.log(beasts.indexOf('bison', 2));
console.log(beasts.myIndexOf('bison', 2));
// expected output: 4
console.log(beasts.indexOf('giraffe'));
console.log(beasts.myIndexOf('giraffe'));
// expected output: -1
1
1
4
4
-1
undefined
你很接近了。将return -1;
语句移出if/else
块。目前写的,你只收到1如果没有找到匹配和你传入了两个参数。
Array.prototype.myIndexOf = function(...args) {
if(args[1] === undefined){
for(let i = 0; i < this.length; i++){
if(this[i] === args[0]){
return i;
}
}
} else {
for(let i = args[1]; i < this.length; i++){
if(this[i] === args[0]){
return i;
}
}
}
return -1;
};
// TEST
const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
console.log(beasts.indexOf('bison'));
console.log(beasts.myIndexOf('bison'));
// expected output: 1
// start from index 2
console.log(beasts.indexOf('bison', 2));
console.log(beasts.myIndexOf('bison', 2));
// expected output: 4
console.log(beasts.indexOf('giraffe'));
console.log(beasts.myIndexOf('giraffe'));
// expected output: -1
通过这个更改,无论传入的参数数量如何,如果没有匹配,您将始终击中return -1;
。
在最后一个测试用例中,您没有向函数发送第二个参数,因此它是if-else将运行的第一部分-if
部分。那部分没有return -1
。