在我的 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;