2016-07-11 132 views
0

我停留在freecodecamp Profile Lookup这一挑战,这里是我的代码,我不明白为什么我的循环没有运行,它会检查只有第一元件触点[0],为什么我没有增加?为什么我的循环不运行

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

您正在从函数返回。一旦你点击一个'return'语句,该函数就完成了。你期望会发生什么? –

+0

你返回,如果1)第一个名称匹配和对象具有特定属性2)如果第一个名字值不一定匹配; 3)如果对象的'prop'属性不等于'prop'值。听起来像它几乎肯定会返回第一个对象。 –

+0

它也看起来像你的“如果”逻辑不起作用。它总是会返回第一个真正的“if”语句。 – jordaniac89

回答

1

您需要删除else条件,因为如果数组中的第一个联系人与名字不匹配,它将始终返回。

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

它应该是更多的东西是这样的:

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"; 
} 

否则你在第一循环结束后返回不管。这样该方法将循环遍历每条记录,并且只有在不匹配时才返回错误消息。