这是一个rovarspraket功能。我的for循环不会迭代我的短语中的其他字母。它只是停在'这是字符串中的第一个字母。功能正在返回' tot'而不是完整的&t; tothohisos isos fofunon'。我已经盯着这个太久了。任何建议都会有帮助。顺便说一句,我是Javascript的新手。
function translate (phrase) {
var splitPhrase = phrase.split().join();
var letter = splitPhrase[i];
var vowels = ['a', 'e', 'i', 'o', 'u'];
var output = '';
for (i = 0; i < phrase.length; i++) {
if(vowels.indexOf(letter) === -1) {
output = letter + 'o' + letter;
} else {
}
return output
}
};
undefined
translate('this is fun')
"tot"
答案 0 :(得分:2)
为了达到“tothohisos isos fofunon”的最终结果,你可能会忽略一些错误或事情:
output
,而是覆盖它。return
,在第一个字母后停止循环i
之前就已存在。以下是更正后的版本:
function translate (phrase) {
var vowels = ['a', 'e', 'i', 'o', 'u', ' ']; // handle spaces
var output = '';
for (var i = 0; i < phrase.length; i++) { // use var to declare the index variable
var letter = phrase[i]; // array notation accesses character in position i
if (vowels.indexOf(letter) === -1) {
output += letter + 'o' + letter; // += appends
} else {
output += letter; // handle vowels & spaces
}
}
return output; // return outside the loop
};
alert(translate('this is fun'));
答案 1 :(得分:1)
正如@Cᴏʀʏ所说,你有一些问题,其中更多的是在循环内部或周围,所以如果避免直接使用循环,它会更清楚,比如
function translate(phrase) {
var vowels = {
'a': true,
'e': true,
'i': true,
'o': true,
'u': true,
' ': true
};
return phrase.split('').map(function(el){
return vowels[el] && el || (el+'o'+el);
}).join('');
}
document.getElementById('r').innerHTML = 'phrase: "'+'this is fun'+'"<br/>';
document.getElementById('r').innerHTML += 'translates: "'+translate('this is fun')+'"<br/>';
<div id='r'></div>
变体与正则表达式:
"this is fun".replace(/([^aeiou ])/gi, "$1o$1");
document.getElementById('r').innerHTML = 'phrase: "'+'this is fun'+'"<br/>';
document.getElementById('r').innerHTML += 'translates: "'+"this is fun".replace(/([^aeiou ])/gi, "$1o$1");+'"<br/>';
<div id='r'></div>
答案 2 :(得分:0)
这是Cory答案的固定版本。他说的一切都是正确的,除了当角色也是空间时你也需要跳过。此外,没有理由通过将元音变成数组来浪费精力,使用类似下面的字符串工作正常。我还在jsfiddle中对此进行了测试,以确保它返回您在原始帖子中要求的输出。
function translate (phrase) {
var skip = 'aeiou ';
var output = '';
for (var i = 0; i < phrase.length; i++) {
var letter = phrase[i];
if (skip.indexOf(letter) === -1) {
output += letter + 'o' + letter;
} else {
output += letter;
}
}
return output;
};
alert(translate('this is fun'));