在我的 javascript 函数中,我的 for 循环的结尾不是 运行
The end of my for loop is not running in my javascript function
我正在尝试在 JavaScript 中重新创建 indexOf 函数。我无法让 return -1 部分工作,但其他部分工作正常。似乎我的 for 循环的结尾不是 运行,因为我试图打印出“循环结束”。我也有一些测试代码和下面的输出。任何帮助将不胜感激。
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
在最后一个测试用例中,您没有向函数发送第二个参数,因此 if-else 的第一部分将 运行 - if
部分。那部分没有return -1
。
你很接近。将 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;
。
我正在尝试在 JavaScript 中重新创建 indexOf 函数。我无法让 return -1 部分工作,但其他部分工作正常。似乎我的 for 循环的结尾不是 运行,因为我试图打印出“循环结束”。我也有一些测试代码和下面的输出。任何帮助将不胜感激。
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
在最后一个测试用例中,您没有向函数发送第二个参数,因此 if-else 的第一部分将 运行 - if
部分。那部分没有return -1
。
你很接近。将 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;
。