2014-01-17 64 views
0

我想在我的forEach循环中应用一个中断。我不认为有可能在forEach中实际使用中断(不是100%为什么,我刚刚阅读了它并且相信它)。我怎样才能摆脱forEach或重新构造我的功能?

这里是我的代码:

function translate(wordString){ 

var vowel = 'aeiou'; 
var wordArr = wordString.split(' '); 
var wordArray = []; 
wordArr.forEach(function(word){ 


    if(vowel.search(word.charAt(0))!=-1){ 
     wordArray.push(word + 'ay'); 
     //WOULD LIKE TO PUT BREAK HERE; 
     // break; 

    } 
    else{ 
     index = 0; 
    } 
    for(var i =0; i< word.length; i++){ 
     if(vowel.search(word.charAt(i)) !=-1){ 
      if(word.charAt(i) != 'u' || (word.charAt(i) == 'u' && word.charAt(i - 1) != 'q')){ 
       index = i; 
       break; 
      } 
     } 
    } 
    wordArray.push(word.substring(index, word.length) + word.substring(0, index) + 'ay'); 
    }); 
    return wordArray.join(' '); 
} 

translate('apple'); 

当我通过以元音开头的单词时,我得到一个重复的字,我想只是有回路断线每当我的第一个if语句里面步骤。这可能吗?

这些是我需要通过的最后两项测试,我认为如果我能以某种方式停止指定位置的循环,它们将被解决。

这里是一个repl.it链接http://repl.it/Nv6

http://repl.it/Nv6

回答

3

使用.some()而不是.forEach(),并且return true当你想打破。

.every()return false中断。

0
//... 
    //WOULD LIKE TO PUT BREAK HERE; 
    // break; 
    return; 

'return'适合我。

+0

只是FYI,它会暂停'.forEach()'当前迭代中的回调,但它不会像'for for'循环中的'break'那样暂停迭代。 –

+0

如果你想结束所有的迭代,你可以抛出一个类型异常并忽略它。类似'function Foo(){}'和'throw new Foo();'并尝试捕获(如果foo实例){} – Eric