我已经花了几个小时尝试理解这一点 - 我知道这与... else语句逻辑顺序有关,但是每次我尝试跟随我都会迷路。有人请向我解释一下,如果可能的话,请给出一个指针,即如果...否则逻辑顺序(一种hack/Quick方法要记住例如:"始终从较大的样本空间开始...")
)这里是:
任务如下:我们有一系列代表对象 我们的联系人列表中的不同人。
将FirstName和属性(Prop)作为lookupprofile函数作为 争论已被预先为您编写。
该功能应检查FirstName是否是实际联系人 FirstName和给定属性(Prop)是该联系人的属性。
如果两者都为true,则返回该属性的"值"。
如果FirstName与任何联系人不符,则返回"没有这样 联系"
如果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){
for(var i=0;i < contacts.length;i++){
if (contacts[i].hasOwnProperty(prop))
{
if(contacts[i].firstName === firstName){
return contacts[i][prop];
}
else {
return "No such contact";
}
}
// Only change code above this line
}
return "No such property";
}
// Change these values to test your function
console.log(lookUpProfile("Harry", "likes"));
此代码是正确的:
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++){
if (contacts[i].firstName === firstName)
{
if(contacts[i].hasOwnProperty(prop)){
return contacts[i][prop];
}
else {
return "No such property";
}
}
// Only change code above this line
}
return "No such contact";
}
// Change these values to test your function
console.log(lookUpProfile("Harry", "likes"));
如果有人可以帮助我解释差异,我将非常感谢。预先感谢您!
这些代码的差异是使用条件。在失败的代码中,如果用户名与通过参数的名称不匹配,则您将从函数中返回。因此,当第一个项目无法匹配时,它将返回。
if (contacts[i].hasOwnProperty(prop))
{
//INCORRECT USE OF NAME CHECK IF CONDITION
if(contacts[i].firstName === firstName){
return contacts[i][prop];
}
else {
return "No such contact";
}
}
在第二个名字匹配时,您才会返回。
//CORRECT USE OF IF CONDITION FOR NAME CHECK
if (contacts[i].firstName === firstName)
{
if(contacts[i].hasOwnProperty(prop)){
return contacts[i][prop];
}
else {
return "No such property";
}
}
if (contacts[i].hasOwnProperty(prop))
{
if(contacts[i].firstName === firstName){
return contacts[i][prop];
}
else {
return "No such contact";
}
因此,当它与likes
遇到联系时,但是firstName
不等于" Harry",它将立即返回"无联系"。
如果对象包含指定属性,则hasOwnProperty()
方法返回对或false。在正确的版本中,您正在寻找Harry中返回true的属性(喜欢)。在无效的一个中,您正在寻找尚未指定的对象的属性,因此它将始终为false。