我们有一个对象数组,里面存储着通讯录。
函数 lookUp 有两个预定义参数:firstName值和prop属性 。
函数将会检查通讯录中是否存在一个与传入的 firstName 相同的联系人。如果存在,那么还需要检查对应的联系人中是否存在 prop属性。
如果它们都存在,函数返回prop属性对应的值。
如果firstName 值不存在,返回 “No such contact”。
如果prop 属性不存在,返回 “No such property”。
注意两个问题:
1. “No such contact”?
原因在于你把 return “No such contact”; 这条语句放到for循环里面了!for循环执行第一遍的时候 如果运气不好都不符合那就会返回这个字符串,函数也就结束了,但是,这个时候只是遍历了对象数组的第一个元素,也就是说,这个函数的作用只是判断第一个对象是否满足要求…这不是我们所希望的,我们希望它遍历所有的对象…所以应该等它都遍历完(即 放到for循环外面),如果不满足返回”No such contact”.
2.undefined?
仔细看看你的return语句是否这样写的 : return contacts[i].prop; 这样写也没错啊? 没错你个大头鬼啊! prop是形参,对应的实参题目中给的是字符串类型,你见过 点(.) 运算符后面接字符串的啊? 所以正确写法: return contacts[i].[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 lookUp(firstName, prop){
// 请把你的代码写在这条注释以下
for(var i in contacts){
if(firstName===contacts[i]["firstName"]){
if(contacts[i].hasOwnProperty(prop)){
return contacts[i][prop];
}else{
return "No such property";
}
}
}
return "No such contact";
// 请把你的代码写在这条注释以上
}
// 你可以修改这一行来测试你的代码
lookUp("Akira", "likes");