我的问题是检索“A”、“B”、“C”或“D”,如果我传递的字符串 s 的第一个字母属于 {a,e,i,o,u} 或 {b ,c,d,f,g} 或 {h,j,k,l,m} 或其他分别。 我正在努力实现这样的目标:
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
谢谢!
答案 0 :(得分:0)
这是因为在您的原始代码中您正在执行 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"));
答案 1 :(得分:0)
在您的情况下,您只编写函数定义。要运行需要添加 () 的函数。所以只需在定义后添加 () 即可。
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'));
答案 2 :(得分:0)
在第一个示例中,您调用了 findIndex
方法,但在第二个示例中,您只是定义了 function
,而没有调用它。
您必须找到解决方案来修复它:
您定义和调用方法的位置,例如您在此处尝试执行的操作,请检查 documentation。
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'))
答案 3 :(得分:0)
你只是传递了函数的引用,你并没有执行它。您可以在函数结束后立即添加 ()
以这样运行它:
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
say
任何傻瓜都可以编写计算机可以理解的代码。优秀的程序员会编写人类可以理解的代码。