2017-01-21 2 views
1

ich eine Funktion schreiben wollen, die Namen wie diese ...entfernen Nachname Suffix mit Javascript rekursive Funktion

Dan Smith Jr 
Kim Johnson II 
Dr Jones PHD 
Bill Clinton 

und gibt den Nachnamen ...

Smith 
Johnson 
Jones 
Clinton 

Meine Lösung nimmt, ist um das letzte Wort von einer Zeichenkette zu trennen, es mit einem Stoppwortarray zu vergleichen und rekursiv zu wiederholen, bis ein Wort nicht im Stoppwortarray ist ...

var fullNameArray; 
var lastName; 
var suffixArray = ["jR","Jr","JR","jr","I","II","III","i","ii","iii","PHD","PHd"]; //list of stopword prefixes 

function getLastName(fullName){ 
    fullNameArray = fullName.split(" "); 
    lastName = fullNameArray[fullNameArray.length - 1]; //got the last word 

    if (suffixArray.indexOf(lastName) == -1) { 
     //it's NOT a suffix so RETURN the name 
     console.log("returning last name of: " + lastName); 
     return lastName; 
    } else { 
     //it WAS a suffix so call the function again with the last name chopped off 
     fullNameArray.pop(); //remove the last item 
     getLastName(fullNameArray.join(" ")); 
    } 
} 

Mein Problem ist, dass der rekursive Aufruf nicht wie erwartet funktioniert:

getLastName ("Dan Smith") korrekt zurückgibt:

"returning last name of: Smith" 
"Smith" 

getLastName ("Dan Smith Jr") gibt ...

Welchen Fehler mache ich für die Rückkehr nicht von innerhalb eines rekursiven Anrufs zu arbeiten? !!

Antwort

4

Sie müssen das Ergebnis der rekursiven Aufruf der Funktion zurückzukehren:

return getLastName(fullNameArray.join(" ")); 
+1

oh Mann - das ist schmerzhaft - Dank/leid (Ich werde in 5 Minuten als Antwort akzeptieren) – d3wannabe