2016-07-11 5 views
0

Ich bin bei dieser Herausforderung in freecodecamp stecken Profile Lookup und hier ist mein Code, ich verstehe nicht, warum meine Schleife nicht läuft, überprüft es nur das erste Element Kontakte [0], warum Ich werde nicht inkrementiert?Warum meine Schleife nicht läuft

function lookUpProfile(firstName, prop){ 

for(var i=0;i<contacts.length;i++){ 
    if(contacts[i].firstName===firstName && contacts[i].hasOwnProperty(prop)){ 
     return contacts[i][prop]; 
    } 
    else if(contacts[i].firstName !== firstName){ 
     return "No such contact"; 
    } 
    else if (contacts[i].prop!==prop){ 
     return "No such property"; 
    } 


    } 


} 
+5

Sie kommen von der Funktion zurück. Sobald Sie eine 'return' Anweisung treffen, ist die Funktion erledigt. Was hast du erwartet? –

+0

Sie geben zurück, wenn 1) der erste Name übereinstimmt und das Objekt eine bestimmte Eigenschaft hat 2) wenn der Vorname * nicht * übereinstimmt und 3) wenn die Prop-Eigenschaft des Objekts nicht mit dem Prop-Wert übereinstimmt. Klingt, als würde es fast sicher auf das erste Objekt zurückkommen. –

+0

Es sieht auch so aus, als würde Ihre "if" -Logik nicht funktionieren. Es wird immer mit der ersten wahren "Wenn" -Aussage zurückkehren. – jordaniac89

Antwort

1

Sie müssen die else if-Bedingungen entfernen, da es immer zurückkehrt, wenn der erste Kontakt im Array nicht mit dem Vornamen übereinstimmt.

function lookUpProfile(firstName, prop) { 
    for (var i = 0; i < contacts.length; i++) { 
    if (contacts[i].firstName === firstName) { 
     if (contacts[i].hasOwnProperty(prop)) 
     return contacts[i][prop]; 
     else 
     return "Contact found but the property " + prop + " does not exist."; 
    } 
    } 
    return "No contact found."; 
} 
0

Es sollte etwas mehr so ​​aussehen:

function lookUpProfile(firstName, prop){ 

    for(var i=0;i<contacts.length;i++){ 
     if(contacts[i].firstName===firstName && contacts[i].hasOwnProperty(prop)){ 
     return contacts[i][prop]; 
     } 
    } 

    return "No such contact and property"; 
} 

Ansonsten werden Sie nach der ersten Schleife zurückkehrt, egal was. Auf diese Weise wird die Methode jeden Datensatz durchlaufen und nur die Fehlermeldung zurückgeben, wenn sie nicht übereinstimmt.