我写了一个函数转换成PigLatin。
结果:手套
预期:oveglay
第一次通过函数prepareCononants
str = 'glove'
prepared = 'loveg'
第二次
str = 'loveg'
prepared = 'ovegl'
第三次
str = 'ovegal'
prepared = ''
准备好的条件。长度> 0未满足,因此应返回str +'ay'
但是没有,它会返回到这里而不是返回到translatePigLatin函数。 它将递归调用函数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:我做了另一个实现,但我无法理解这里的问题。
答案 0 :(得分:2)
问题在于:
if (prepared.length > 0) {
prepareCononants(prepared);
}
return str + "ay";
您仍然会再次执行该功能,但会返回第一个结果。你应该这样做:
if (prepared.length > 0) {
return prepareCononants(prepared);
}
return str + "ay";
这输出" oveglay"