我的if语句无法识别字符串.indexOf(letter)==-1


export default class Pangram {
private input: string;
private alphabet = "abcdefghijklmnopqrstuvwxyz";
constructor(input: string) {
this.input = input.toLowerCase();
}
isPangram(): boolean {
if(this.input.length == 0) return false;
this.alphabet.split('').forEach(letter => {
console.log(this.input.indexOf('x')); // console => -1
if(this.input.indexOf(letter) == -1) {
return false
}
});
return true;
}
}
const pangram = new Pangram("a quick movement of the enemy will jeopardize five gunboats");
console.log(pangram.isPangram());

控制台日志返回-1,但if语句没有捕获-1,因此函数在应该返回false的时候返回true,有什么想法吗?

测试用例正在测试丢失的x.

问题是return false只影响forEach函数的范围,而不影响isPangram。事实上,我甚至在typescript操场上尝试过它,但由于不是forEach返回值的所有路径,所以出现了编译错误。

我怀疑你想要类似下面的东西

private isXFound = true;
isPangram(): boolean {
if(this.input.length == 0) return false;
this.alphabet.split('').forEach(letter => {
console.log(this.input.indexOf('x')); // console => -1
if(this.input.indexOf(letter) == -1) {
this.isXFound = false;
}            
});
return this.isXFound;
}

更容易的是不使用.forEach,无论如何,imho应该是大多数用途的默认值:

for (const letter of this.alphabet.split('')) {
if(this.input.indexOf(letter) == -1) {
return false
}
};
return true;

你也可以使用every,它也会在发现第一个阴性后立即退出:

return this.alphabet.split('').every( letter => {
return this.input.indexOf(letter) !== -1;
});

最新更新