在 freecode camp 检查点上查找个人资料

新手上路,请多包涵

所以我正在浏览 freecodecamp,我正在解决那里的问题,以保持编程的循环,我偶然发现了一个障碍,我不太确定哪里出了问题。

所以我有一个名为联系人的对象数组,我需要创建一个名为 lookUp(firstName, prop) 的函数。作业的正文是这样的:

该函数应检查 firstName 是否为实际联系人的 firstName 以及该联系人的给定属性( prop 属性)。

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

如果 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": ["Intruiging Cases", "Violin"]
    },
    {
        "firstName": "Kristian",
        "lastName": "Vos",
        "number": "unknown",
        "likes": ["Javascript", "Gaming", "Foxes"]
    },
];

function lookUp( 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";
      }
    } else {
      return "No such contact";
    }
  }
}

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

所以我用 for 循环检查每个对象。在第一个 if 我检查对象的 firstName 属性是否等于函数参数 firstName,然后如果是,我检查对象是否具有属性 prop ,我应该可以退货。但似乎

return contacts[i].prop;

不工作,我有点不知道为什么。我敢肯定这是微不足道的事情,但我不明白为什么。当我去控制台并测试时

contacts[0].likes

我得到了数组 ["Pizza", "Coding", "Brownie Points"] ,但在我看来这不起作用。我在这里做错了什么?

编辑

好的,所以我尝试了

function lookUp( 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";
      }
    } else {
      return "No such contact";
    }
  }
}

但我仍然遇到同样的错误:

原文由 dingo_d 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 255
2 个回答

好吧,我很笨,我太早退出了 for 循环:

 function lookUp( firstName, prop ){
  for( var i = 0; i < contacts.length; i++ ){
    if( firstName == contacts[i].firstName ) {
      if( contacts[i].hasOwnProperty( prop ) ) {
        return contacts[i][prop];
      } else {
        return "No such property";
      }
    }
  }
  return "No such contact";
}

这行得通。

原文由 dingo_d 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为您对 return 的作用感到困惑。您的代码只会执行一次迭代和 return "No such contact" 。 Return 立即停止函数执行。这是我用 console.log https://jsfiddle.net/oegw3a4y/ 证明的意思

在您的情况下,第一次迭代在第一个 if 语句中评估为 false 并立即转到 else

原文由 Michelangelo 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题