2016-07-03 54 views
0

我尝试通过配置文件查找来完成任务。它应该搜索道具并返回他的价值,如果它不能,那么从条件 的“没有这样的接触”或“没有这样的属性”依赖我不明白为什么最后一个条件(else语句)不执行。这是代码。我被困在循环任务中

var contacts = [ 
{ 
    "firstName": "Akira", 
    "lastName": "Laine", 
    "number": "0543236543", 
    "likes": ["Pizza", "Coding", "Brownie Points"] 
}, 
{ 
    "firstName": "Harry", 
    "lastName": "Potter", 
    "number": "0994372684", 
    "likes": ["Hogwarts", "Magic", "Hagrid"] 
}, 
{ 
    "firstName": "Sherlock", 
    "lastName": "Holmes", 
    "number": "0487345643", 
    "likes": ["Intriguing Cases", "Violin"] 
}, 
{ 
    "firstName": "Kristian", 
    "lastName": "Vos", 
    "number": "unknown", 
    "likes": ["Javascript", "Gaming", "Foxes"] 
} 
    ]; 

function lookUpProfile(firstName, prop) { 
    var i = 0; 
    while (contacts[i]) { 
     if (contacts[i].firstName === firstName && contacts[i].hasOwnProperty(prop)) { 
      return contacts[i][prop]; 

     } 
     i++; 
    } 
    if (!contacts.firstName) { 
     return "No such contact"; 
    } 
    else { 
     return "No such property"; 
    } 

} 

lookUpProfile("Akira", "address");` 

它返回“没有这样的联系”,虽然应该返回“没有这样的属性”。

+1

'接触' 是一个数组,也没有 '的firstName'! – MHS

回答

0

如果找到名称,您可以保存一个标志来表示。 像这样:

function lookUpProfile(firstName, prop) { 
    var i = 0; 
    var nameflag = false; 
    while (contacts[i]) { 
     if (contacts[i].firstName === firstName && contacts[i].hasOwnProperty(prop)) { 
      return contacts[i][prop]; 
     } 
     if (contacts[i].firstName == firstname) 
      nameflag = true; 
     i++; 
    } 
    if (!nameflag) { 
     return "No such contact"; 
    } 
    else { 
     return "No such property"; 
    } 

} 
0

if (!contacts.firstName)始终为false

+0

它必须在评论中 – nmnsud

0

这是你的功能应该是什么样子

function lookUpProfile(firstName, prop){ 
var i = 0; 
var a; 
while(contacts[i]) { 

if (contacts[i]["firstName"] === firstName && contacts[i].hasOwnProperty(prop))  { 
    return contacts[i][prop]; 

} 
else if (contacts[i]["firstName"] != firstName) { 
    a = "No Contact"; 
} else { 
    a= "No property"; 
    return a; 
} 

i++; 
} 
return a; 

} 
0

我已经更新了你的脚本,它返回No such property

function lookUpProfile(firstName, prop){ 
    var i = 0, index = 0; 
    while(i < contacts.length) { 
     if (contacts[i].firstName == firstName) { 
      index++; 
     } 
     i++; 
    } 
    if (index > 0) { 
     if (!contacts[index][prop]) { 
      return "No such property"; 
     } 
    } else { 
     return "No such contact"; 
    } 
} 
console.log(lookUpProfile("Akira", "address")); //Output: No such property 
console.log(lookUpProfile("John", "address")); //Output: No such contacts 

希望也适合你。

1

你可以通过contacts循环,如果匹配的名字接触被发现,你需要返回属性的任一值或“没有这样的财产”。如果循环结束而没有返回任何值,则意味着未找到联系人。

function lookUpProfile(firstName, prop) { 
    var i = 0, 
     contact; 
    for(i = 0; i< contacts.length; i++) { 
     contact = contacts[i]; 
     if(contact.firstName === firstName) { 
     return contact.hasOwnProperty(prop) ? contact[prop] : "No such property"; 
     } 
    } 
    return "No such contact"; 
} 

JSBin:https://jsbin.com/pobunavacu/edit?js,console

编辑:(ES6版)

如果你写的没有IE或Opera控制环境的代码,你可以用ES6功能做到这一点更容易的Javascript(在Chrome,Firefox和NodeJS中测试):

function lookUpProfile(firstName, prop) { 
    return (contacts.find(contact => contact.firstName === firstName) || {[prop]: "No such contact"})[prop] || "No such property"; 
} 
0

您需要标记(布尔),您的问题

function lookUpProfile(firstName, prop) { 
var contactExist = false; 
var i = 0; 
while (contacts[i]) { 
    if (contacts[i].firstName === firstName) { 
     if (contacts[i].hasOwnProperty(prop)) { 
      return contacts[i][prop]; 
     } else { 
      contactExist = true; 
      break; 
     } 
    } 
    i++; 
} 

if (!contactExist) { 
    return "No such contact"; 
} 
else { 
    return "No such property"; 
} 

}