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;
});