我写了一个函数转换为PigLatin。
结果:手套
预期:oveglay
第一次通过函数prepareCononants时
str = 'glove'
prepared = 'loveg'
第二次
str = 'loveg'
prepared = 'ovegl'
第三次
str = 'ovegal'
prepared = ''
条件prepare.length> 0不满足,所以它应该返回str +'ay'
但不,它将返回此处,而是返回translatePigLatin函数。
它将以比我预期多2倍的方式递归调用函数prepareCononants
if(prepared.length > 0) {
debugger;
prepareCononants(prepared);
}
debugger;//here
return str + "ay";
码:
function translatePigLatin(str) {
let word = prepareVowels(str);
if(word.length > 0) {
return word;
}
return prepareCononants(str);
}
function prepareVowels(str) {
let vowels = [
'a', 'e',
'i', 'o',
'u'
];
return vowels.map((vowel) => {
if(vowel === str[0]) {
return str + 'way';
}
})
.filter((word) => {
return word != null;
})
.toString();
}
function prepareCononants(str) {
debugger;
let consonants = [
'b', 'c',
'd', 'f',
'g', 'h',
'j', 'k',
'l', 'm',
'n', 'p',
'q', 'r',
's', 't',
'v', 'w',
'x', 'y',
'z'
];
let prepared = consonants.map((val) => {
if(str[0] === val) {
let word = str.substring(1, str.length);
word += str[0];
return word;
}})
.filter((word) => {
return word !== 'undefined';
})
.toString()
.replace(/,/g,'');
if(prepared.length > 0) {
debugger;
prepareCononants(prepared);
}
debugger;
return str + "ay";
}
console.log(translatePigLatin("glove"));
PS:我做了另一种实现,但是我在这里不明白问题所在。
最佳答案
问题是这样的:
if (prepared.length > 0) {
prepareCononants(prepared);
}
return str + "ay";
您仍在再次执行该功能,但返回第一个结果。你应该做:
if (prepared.length > 0) {
return prepareCononants(prepared);
}
return str + "ay";
输出“ oveglay”
关于javascript - 我不明白这里的逻辑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45399952/