for循环是否在字符串的第一个字母处停止?

时间:2015-07-14 12:51:30

标签: javascript arrays string for-loop

这是一个rovarspra​​ket功能。我的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"

3 个答案:

答案 0 :(得分:2)

为了达到“tothohisos isos fofunon”的最终结果,你可能会忽略一些错误或事情:

  1. 您不是数据附加到output,而是覆盖它。
  2. 来自循环内的return,在第一个字母后停止循环
  3. 您使用索引i之前就已存在。
  4. 不必要的分裂和加入
  5. 不处理字母 元音
  6. 时的情况
  7. 不处理空格
  8. 以下是更正后的版本:

    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'));