我的问题是,如果我传递的字符串s的第一个字母分别属于{A,e,i,o,u}或{B,C,D,f,g}或{h,j,k,l,m}或其他剩余字母,则检索'A','B','C'或'D'。我正在努力实现同样的目标:
function getLetter(s){
let letter = 'ABCD'[findIndex(s[0])];
return letter;
}
function findIndex(t){
var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(t)/5);
//console.log(a);
if (a<3){
return a;
}
else{
return 3;
}
}
它奏效了。但是,当我试图使用匿名函数来减少行数时,我无法执行我的函数。我知道我有一个愚蠢的错误,因为我刚开始编程。我的代码出了什么问题?像这样的东西:
let getLetter = s =>'ABCD'[function(){
var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5);
console.log("anonymous function executed");
if (a<3){
return a;
}
else{
return 3;
}
}]
My output is: undefined
谢谢!
在第一个示例中,您调用了findIndex
方法,但在第二个示例中只定义了function
,而没有调用它。
你必须解决它:
- 使用IIFE(立即调用函数表达式(:
在定义和调用方法的地方,比如在这里尝试做什么,请查看文档。
let getLetter = s =>'ABCD'[(function(){
var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5);
console.log("anonymous function executed");
if (a<3){
return a;
}
else{
return 3;
}
})()];
console.log(getLetter('e'))
- 将
findIndex
定义为单独的function
:
这使您的代码更加清晰。
let getLetter = s =>'ABCD'[_findIndex(s)];
let _findIndex = letter => {
var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(letter[0])/5);
console.log("anonymous function executed");
if (a<3){
return a;
}
else{
return 3;
}
};
console.log(getLetter('e'))
这是因为在您的原始代码中,您正在执行findIndex()
,但在您的第二个代码中,只是使用匿名函数本身作为索引,而不是执行它
let getLetter = s =>'ABCD'[function(){
var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5);
console.log("anonymous function executed");
if (a<3){
return a;
}
else{
return 3;
}
}()]
console.log(getLetter("a"));
在您的情况下,您只编写函数defition。要运行需要添加((的函数。所以只需在辩护后加上((。
let getLetter = s =>'ABCD'[function(){
var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5);
console.log("anonymous function executed");
if (a<3){
return a;
}
else{
return 3;
}
}()];
console.log(getLetter('a'));
你只是传递了函数的引用,你没有执行它。你可以在函数结束后立即添加()
来运行它,如下所示:
let getLetter = s =>'ABCD'[function(){
var a = Number.parseInt("aeioubcdfghjklmnpqrstvwxyz".indexOf(s[0])/5);
console.log("anonymous function executed");
if (a<3){
return a;
}
else{
return 3;
}
}()]
console.log(getLetter('test'));
但我强烈建议不要这样做,因为随着时间的推移,阅读、理解、维护和发展都会变得更加困难。比减少代码行更重要的是它是人类可读的,就像Martin Fowler
说的
任何傻瓜都可以编写计算机能够理解的代码。优秀的程序员编写人类能够理解的代码。