我认为以下代码是正确的:
该函数应检查firstName是否为实际联系人的firstName,并且给定属性(prop)是该联系人的属性。
如果两者都为真,则返回"值"该财产。
使用参数" Kristian"调用函数lookUpProfile。和" lastName"应该返回价值" Vos"但事实并非如此。
有些想法哪里出错了?
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){
for(var i=0;i<contacts.length;i++){
for(var j=0;j<contacts[i].length;j++){
if(contacts[i][0]===firstName && contacts[i][j].hasOwnProperty(prop)){
return contacts[i][j];
}
}
}
}
// Change these values to test your function
lookUpProfile("Kristian", "lastName");
&#13;
答案 0 :(得分:0)
你的代码的问题是第二个for循环正在检查一个根本不存在的属性contacts[i].length
。对象没有.length
属性,只有Arrays。
你不需要第二个for循环来循环所有属性,你可以只检查firstName,然后检查你想要的属性是否存在,然后返回它。
for(var i=0;i<contacts.length;i++){
if(contacts[i]['firstName']===firstName && contacts[i].hasOwnProperty(prop)){
return contacts[i][prop];
}
}
应该是你想要的。
如果要循环所有对象属性,则应使用for in
循环,如下所示:
for(var key in contacts[i]){
//place your check here using contacts[i][key] the get the value for the key
}
修改:添加了for in
示例
答案 1 :(得分:0)
您只能在查找函数中使用两行代码解决问题:
function lookUpProfile(firstName, prop) {
var contact = contacts.find((c) => c.firstName === firstName);
return contact.hasOwnProperty(prop) ? contact[prop] : null;
}
使用我的JSFiddle尝试一下。