我已经陷入了循环

时间:2016-07-03 07:11:58

标签: javascript

我尝试使用配置文件查找来完成任务。它应该搜索prop并返回他的值,如果它不能那么"没有这样的联系"或"没有这样的财产"依赖于条件  我不明白为什么最后一个条件(否则声明)没有表现。这是代码。

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");`

它返回"没有这样的联系"虽然应该返回"没有这样的财产"。

6 个答案:

答案 0 :(得分: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的受控环境编写代码,您可以使用Javascript的ES6功能(在Chrome,Firefox和NodeJS中测试)更轻松地执行此操作:

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

答案 1 :(得分:0)

if (!contacts.firstName)总是假的

答案 2 :(得分: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;

}

答案 3 :(得分: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

希望也适合你。

答案 4 :(得分: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";
    }

}

答案 5 :(得分: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";
}

}