【问题标题】:Doubts with a Lookup exercise查询练习的疑问
【发布时间】:2017-08-06 14:14:31
【问题描述】:

当我在 freeCodeCamp 中做一些 js 练习时,我遇到了这个挑战。 我们的联系人列表中有一组代表不同人的对象。

已经为您预先编写了一个将 firstName 和一个属性 (prop) 作为参数的 lookUpProfile 函数。

该函数应检查 firstName 是否为实际联系人的名字,并且给定属性 (prop) 是否为该联系人的属性。

如果两者都为真,则返回该属性的“值”。

如果 firstName 不对应任何联系人,则返回“No such contact”

如果 prop 不对应于任何有效属性,则返回“No such property” 这是我的完成代码:

 //Setup
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(myName, myProp){
// Only change code below this line
  for (var i = 0; i < contacts.length; i++){

    if (contacts[i].firstName === myName){

      if (contacts[i].hasOwnProperty(myProp)){
        return contacts[i][myProp];
  } else {
        return "No such property";
      }

  } else {
        return "No such contact";}
  }

// Only change code above this line
}


// Change these values to test your function
lookUpProfile("Kristian", "lastName"); 

但它只返回“没有这样的联系”,我的猜测是第一个 if 没有评估为真。但是,即使是网站的答案也是一样的。第一次比较真的有什么问题吗?这是什么?

【问题讨论】:

  • 尝试逐行评估您的代码:您对第一项执行if (contacts[i].firstName === myName){ 。它与"Kristian" 不匹配,因此您转到相应的else 分支:return "No such contact";。你从函数中返回。所以你甚至不检查第一个以外的元素。
  • 我现在明白了,我猜它没有返回 true,因为它只检查第一个数组,因为我给出了一个 else 语句,说如果它不匹配第一个比较的属性,它应该返回false 在返回 false 之前应该首先检查所有数组。我所要做的就是将 else 移到另一行。有趣,谢谢提示。

标签: javascript if-statement


【解决方案1】:

这只是一个小问题,您只是比较第一个联系人,如果值不匹配,则返回“没有这样的联系人”。相反,您应该等待for 循环与所有联系人进行比较,如果没有找到匹配项,则返回“no such contact”。

在下面的代码中,我添加了一条日志语句以及修复程序,以显示它在返回结果之前如何与所有四个联系人进行比较。当然,如果找到匹配项,程序会立即返回。

//Setup
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(myName, myProp) {
  var matchingContact = null;

  for (var i = 0; i < contacts.length; i++) {
    console.log("Comparing: " + contacts[i].firstName + " with " + myName);
    
    if (contacts[i].firstName === myName) {
      matchingContact = contacts[i];

      if (contacts[i].hasOwnProperty(myProp)) {
        return contacts[i][myProp];
      } else {
        return "No such property";
      }
    } 
  }
  
  return "No such contact";
}


// Change these values to test your function
console.log(lookUpProfile("Kristian", "lastName"));
console.log(lookUpProfile("Jake", "lastName"));
console.log(lookUpProfile("Kristian", "noSuchProp"));

【讨论】:

  • 是的,我注意到,在@zerkms 给了我他的见解之后,也感谢您的回答,我为这样一个荒谬的错误感到很愚蠢 kk
猜你喜欢
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多