【问题标题】:Javascript - If statement not working as plannedJavascript - 如果语句没有按计划工作
【发布时间】:2021-12-31 15:11:32
【问题描述】:

我有一行代码的问题,似乎没有按预期执行:

if (name === contacts[i].firstName && contacts[i].hasOwnProperty(prop)){
        return contacts[i][prop];

它应该检查 name 是否与对象的 firstName 匹配,以及对象是否具有 prop 属性 - 如果两者都为 true,则返回该属性。但是,运行测试时似乎跳过了这段代码,因为每个结果都给了我“没有这样的联系”的答案。

// Setup
const 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 i = 0; i < contacts.length ; i++){
  
  if (name === contacts[i].firstName && contacts[i].hasOwnProperty(prop)){
    return contacts[i][prop];
  }else if (name !== contacts[i]["firstName"]){
    return "No such contact"
  }else if (prop !== contacts[i]["prop"])
    return "No such property";
  } 

  // Only change code above this line
}
const search = lookUpProfile("Akira", "likes");

console.log(search);

下面有一个使用嵌套 IF 语句的解决方案,但我想知道为什么我最初尝试解决它的方法不起作用。

function lookUpProfile(name, prop) {
  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";
}

完整的问题可以在这里访问: https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/profile-lookup

【问题讨论】:

  • "这段代码似乎被跳过了" - 不,它没有被跳过。但是您的第一个 sn-p 只检查第一个配置文件,并且在循环的第一次迭代中从函数中检查 returns,从不查看其他配置文件。 lookUpProfile("Akira", "likes"); 可能有效,但 lookUpProfile("Harry", "likes"); 无效。
  • 感谢您的回复 - 为什么它不通过其余的迭代?由于每次迭代都基于 for 循环中的 i 值,我不确定它为什么会停在 1 处。此外,lookUpProfile("Akira", "likes"); 似乎也没有返回任何内容。
  • return 退出循环和函数,立即将指定的值返回给调用者,而不运行任何剩余的代码。您可以删除两个 else 子句并分别处理它们,就像您在第二个示例中所做的那样。
  • 如果其中任何一个都不满足,则继续使用else if 子句,其中一个肯定会return,因为它们是您已经测试过的逆条件(并且至少其中一个失败了)。
  • @DCoderT 啊,我没有发现第二个错误。 else if (prop !== contacts[i]["prop"]) { 可能只是else {,因为prop 始终是一个字符串,而contacts[i].prop 始终是undefined(您的contacts 都没有名为"prop" 的属性)所以if 始终匹配。

标签: javascript if-statement nested operator-keyword


【解决方案1】:

// Setup
const 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) {
  const contact = contacts.find(({ firstName }) => firstName === name);
  if (!contact) {
    return "No such contact"
  }
  if (!contact[prop]) {
    return "No such property";
  }
  return contact[prop];
}

const search = lookUpProfile("Akira", "likes");

console.log(search);

【讨论】:

  • OP 已经有了一个可行的解决方案。他们正在寻找解释为什么他们的第一个 sn-p 不起作用。
猜你喜欢
  • 2013-04-12
  • 2014-04-14
  • 2021-06-14
  • 2012-08-16
  • 2011-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多