【问题标题】:I am confused and I want to know the difference in both codes?我很困惑,我想知道这两个代码的区别?
【发布时间】:2021-05-19 02:14:38
【问题描述】:

我正在学习网络开发,我尝试做这个练习,但给出的答案与我的不同。可能,任何人都请帮我看看我的错误是什么。

代码如下:

给出的答案:

// 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(name, prop){
  // Only change code below this line
  for (let x = 0; x < contacts.length; x++) {
    if (contacts[x].firstName === name) {
      if (contacts[x].hasOwnProperty(prop)) {
        return contacts[x][prop];
      } else {
        return "No such property";
      }
    }
  }
  return "No such contact";
  // Only change code above this line
}

lookUpProfile("Kristian", "lastName");

我的回答:

function lookUpProfile(name, prop) {
  // Only change code below this line
  for (let i = 0; i < contacts.length; i++) {
    if (contacts[i].firstName === name && contacts[i].hasOwnProperty(prop)) {
      return contacts[i][prop];
    } else if (!contacts[i].firstName) {
      return "No such contact";
    } else {
      return "No such property.";
    }
  }
  // Only change code above this line
}

调用lookUpProfile("Kristian", "lastName") 应该返回字符串Vos

【问题讨论】:

  • 因为你总是在 for 循环中返回,所以它永远不会检查超过第一条记录(你的函数将适用于“Akira”),仅此而已。所以,你的错误是永远不允许循环继续。 return 将结束循环并结束函数。

标签: javascript arrays function


【解决方案1】:

您的&amp;&amp; 语句后面有一个else。 因此,只要两个语句都不正确(即第一个示例),它后面的 else 语句就会运行,returns 会结束 return 所在的任何循环。

您的正确示例,带有输入 ("Kristian", "lastName")

第一个例子 (Akira Laine) - 名字不是 Kristian,所以循环继续

第二个例子(哈利波特)——名字不是 Kristian,所以循环继续

第三个例子(夏洛克·福尔摩斯)——名字不是 Kristian,所以循环继续

第四个例子 (Kristian Vos) - 名字是 Kristian,所以循环检查它是否有属性 '姓'。 它确实有属性姓氏,所以返回姓氏。

您的示例,带有输入 ("Kristian", "lastname")

第一个示例 (Akira Laine) - 名字不是 Kristian,它确实有一个属性“姓氏”。

由于它是&amp;&amp; 语句,它仍然读作假。

因此,检查第一个else if

存在的名字为真,因此运行最后一个 else 语句。

这会返回“没有这样的属性”。

【讨论】:

    【解决方案2】:

    给定答案:循环所有联系人,如果没有联系人名字匹配姓名,最后返回“没有这样的联系人”。

    但是,如果循环中的第一个联系人与姓名不匹配,则您返回“No such contact”。

    【讨论】:

      猜你喜欢
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2011-04-11
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2019-07-02
      相关资源
      最近更新 更多