2017-07-16 33 views
3

我試圖用Every()過濾掉另一個數組的數組,因爲Every()循環訪問一個數組,並且一旦返回false就停止。但是,我試圖讓它從其他數組返回新的數組,並且一旦它是假的就停下來。如何使用Every()在Javascript中返回一個新數組?

例如,我有這個詞「機會」,這個數組元音= [「a」,「e」,「我」,「o」,「u」]。所以我想把「機會」中的每個字母都匹配到這個元音數組中,並提取「ch」,如果「機會」中的「a」匹配元音數組,就停止。

這裏是我的代碼

function extract(str) { 

    var vowels = ["a", "e", "i", "o", "u"]; 
    var word = str.split(""); 
    var newletters = []; 
    var firstletter = str[0]; 

    for (var i = 0; i <= vowels.length; i++) { 
    if (firstletter !== vowels[i]) { 
     word.every(function(letter){ 
     if (letter.indexOf(vowels[i]) === -1){ 
     return newletters.push(letter); 
     } else { 
     return false; 
     } 
     }) 

    } 
    } 

    //return str; 
} 

console.log(extract("chance")); 

我無法弄清楚如何使工作在新的陣列來獲得「CH」。

+1

每次返回boolean - 你不能改變的方法是如何工作的 - 怎麼樣使用過濾器還是映射? –

+0

是的,我確實考慮過使用過濾器,而不是通過數組中的所有對象的過濾器循環。我希望它一旦返回false就停止循環... –

+1

爲什麼不使用正則表達式? 'var result = str.match(/^[^ aeiou] * /)[0];'。 –

回答

1

你可以加入元音和使用得到的字符串中一個正則表達式:

function extract(str) { 
 
    var vowels = ["a", "e", "i", "o", "u"]; 
 
    var regex = new RegExp("(.*?)[" + vowels.join("") + "]"); 
 
    if (str.match(regex) != null && str != "") { 
 
    console.log(str.match(regex)[1]); 
 
    //newletters.push(str.match(regex)[1]); 
 
    } 
 
} 
 

 
extract("chance");

+0

那麼:''''和'「電視」'? –

+0

'extract(「」);'(空字符串)和'extract(「rythm」);'(無元音)都會拋出錯誤。 –

0

你不能這樣做。
every()功能旨在爲每個測試元素返回boolean
但是在其中,您可以在newletters數組中添加字母,然後返回true
並且在元音匹配的情況下,僅返回false以結束every()函數。 通過這種方式,在處理結束時,newletters根據需要進行估價。

for (var i = 0; i <= vowels.length; i++) { 
    if (firstletter !== vowels[i]) { 
     word.every(function(letter){ 
     if (letter.indexOf(vowels[i]) === -1){ 
      newletters.push(letter); 
      return true; 
     }    
     return false;    
     }) 

    } 
    } 
相關問題