2017-05-13 3 views
-2

Das ist mein Code, aber ich bin immer in der KonsoleIch versuche, eine Funktion zu schreiben, die die Anzahl der Vokale in einem String zurückgibt

function numOfVowels(string) { 
 
     let count = 0; 
 
    
 
     string = string.split(''); 
 
    
 
     const vowels = function(string) { 
 
     for (let i = 0; i > string.length; i++) { 
 
      if (string[i].toLowerCase() === 'a' || string[i].toLowerCase() === 'e' || string[i].toLowerCase() === 'i' || string[i].toLowerCase() === 'o' || string[i].toLowerCase() === 'u'){ 
 
      count+= 1; 
 
      } 
 
      return count; 
 
     } 
 
     }; 
 
    } 
 
    console.log(numOfVowels('Yellow Submarine'));

+0

Auch was ist undefiniert? Hast du es debuggt? – Carcigenicate

+0

Sie kehren nie von 'numOfVowels' zurück. – Carcigenicate

+0

Ich glaube, '' Yellow Submarine'' kommt unbestimmt zurück oder das '' count'''. - es ist die Zählung, die ich gerade überprüft habe –

Antwort

2

Sie zurückkehren, werden keinen Wert undefiniert von numOfVowels, und es gibt auch keine Notwendigkeit, die Zeichenfolge zu teilen, können Sie über sie iterieren, einen Blick auf den Code unten nehmen:

function numOfVowels(string) { 
 
     let count = 0; 
 
    
 
     for (let i = 0; i < string.length; i++) { 
 
     if (string[i].toLowerCase() === 'a' || string[i].toLowerCase() === 'e' || string[i].toLowerCase() === 'i' || string[i].toLowerCase() === 'o' || string[i].toLowerCase() === 'u'){ 
 
      count+= 1; 
 
     } 
 
     } 
 
     
 
     return count; 
 
} 
 

 
console.log(numOfVowels('Yellow Submarine'));

0

Hier ist Code korrigiert

erstes Problem war mit i > string.length sollte es i < string.length in for Schleife zweites Problem bei return count; war sollte es sein, nachdem die Schleife beendet wird und das dritte Problem war mit vowels Funktion es war nie innerhalb numOfVowels aufgerufen werden.

function numOfVowels(string) { 

    let count = 0; 

    string = string.split(''); 

    const vowels = function(string) { 

    for (let i = 0; i < string.length; i++) { 
     if (string[i].toLowerCase() === 'a' || string[i].toLowerCase() === 'e' || string[i].toLowerCase() === 'i' || string[i].toLowerCase() === 'o' || string[i].toLowerCase() === 'u'){ 
     count+= 1; 
     } 
    } 
     return count; 
    }; 
    return vowels(string); 
} 

console.log(numOfVowels('Yellow Submarine')); 
2

Es gibt einige Probleme hier:

  1. Sie erklären aber nicht nennen die Funktion vowels.
  2. Ihre Return-Anweisung return count; innerhalb Ihrer Schleife und wird auf der ersten Iteration zurückkehren.
  3. Ihre bedingten im for Schleife verwendet > und es sollte < sonst Ihr Codeblock innerhalb der for Schleife als i nie größer sein würde laufen würde nie verwenden als string.length.

Einige alternative Implementierungen von Vokal mit regex Zählen & es2015:

var s = "Yellow Submarine"; 
 

 
// es2015/es6 
 
// using reduce 
 
let count1 = s.split('').reduce((count,char) => (/[aeiou]/i.test(char)) ? count + 1 : count, 0); 
 

 
// using filter 
 
let count2 = s.split('').filter(char => /[aeiou]/i.test(char)).length; 
 

 
console.log(count1); 
 
console.log(count2);

+1

Es wird keinen Typfehler geben, die Schleife wird nur einmal ausgeführt. Anders als diese sehr gute und umfassende Antwort! – Christoph

+0

@Christoph Recht, ich meinte, wenn # 2 wurde behoben. Danke, dass du es aufgezeigt hast. – metame

+1

Es wird kein Fehler auftreten. Die Bedingung ist nicht erfüllt, daher wird der Codeblock nicht ausgeführt. – Christoph

1

Wenn Sie ein bisschen kürzer Implementierung wollen (nur sayin):

countvowels=word=>word.split("").reduce((c,l)=>(["a","e","i","o","u"].indexOf(l.toLowerCase())+1)?++c:c,0); 

http://jsbin.com/durizarobu/edit?console

Verwandte Themen