【问题标题】:If-else inside a for loop not working - Javascriptif-else 在 for 循环中不起作用 - Javascript
【发布时间】:2019-07-07 05:08:33
【问题描述】:

我有一个包含一些属性的数组“联系人”。我的函数使用 for 检查每个联系人的 firstName 属性是否与我的函数的 name 参数匹配,如果匹配,则检查此类联系人是否具有与 prop 参数匹配的属性(前一个 if 中的 if)。两个“if”都有对应的“else”:“no such property”、“not such contact”。

代码其实很简单:

var contacts = [
  {
    "firstName": "Akira",
    "lastName": "Laine",
    "number": "0543236543",
    "likes": ["Pizza", "Coding", "Brownie Points"]
  },
  {
    "firstName": "Harry",
    "lastName": "Potter",
    "number": "0994372684",
    "likes": ["Hogwarts", "Magic", "Hagrid"]
  },
  {
    "firstName": "Kristian",
    "lastName": "Vos",
    "number": "unknown",
    "likes": ["JavaScript", "Gaming", "Foxes"]
  }
];


function lookUpProfile(name, prop) {

  for (var i = 0; i < contacts.length; i++) {

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

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

console.log(lookUpProfile("Harry", "likes"));

以下几行完美运行:

console.log(lookUpProfile("Akira", "likes"));
console.log(lookUpProfile("Akira", "lala"));

现在,如果我把其余元素的任何其他 firsNames 放在一起:

console.log(lookUpProfile("Harry", "likes"));
console.log(lookUpProfile("Kristian", "likes"));

它返回“没有这样的联系”....:/

【问题讨论】:

  • 您在for 循环中使用return,当找不到匹配项时会中断您的for 循环。

标签: javascript arrays object for-loop if-statement


【解决方案1】:

那是因为您在第一次循环迭代中返回 No such contact。将它放在循环之后的函数底部作为一个包罗万象的内容。

var contacts=[{"firstName":"Akira","lastName":"Laine","number":"0543236543","likes":["Pizza","Coding","Brownie Points"]},{"firstName":"Harry","lastName":"Potter","number":"0994372684","likes":["Hogwarts","Magic","Hagrid"]},{"firstName":"Kristian","lastName":"Vos","number":"unknown","likes":["JavaScript","Gaming","Foxes"]}]

function lookUpProfile(name, prop) {

  for (var i = 0; i < contacts.length; i++) {

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

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

console.log(lookUpProfile("Harry", "likes"));
console.log(lookUpProfile("Kristian", "likes"));
console.log(lookUpProfile("Made Up Person", "likes"));
console.log(lookUpProfile("Akira", "Made Up Property"));

【讨论】:

  • 嗯,但我不明白......为什么在外面......?为什么它不能在第一个 if... 的 else 中?这不是逻辑吗?以及为什么 for 停在那里..如果我不理解它的工作方式,我就无法编码..
  • return 退出该功能 - 所以如果第一个联系人不是您要找的人,那么它将流向if,对吗?您正在返回 - 这将退出函数并显示消息 No such contact。 @Ana 这有意义吗?
  • 哦,我明白了,我想我还需要学习很多东西 :D 非常感谢!
【解决方案2】:

在您当前的代码中,如果数组的第一个元素与当前传递的名称不匹配,则进入 else 块并返回“No such contact”(最终只检查第一个元素)

你从 for 循环中的 else 块错误地返回,你需要把它放在循环之外

var contacts = var contacts=[{"firstName":"Akira","lastName":"Laine","number":"0543236543","likes":["Pizza","Coding","Brownie Points"]},{"firstName":"Harry","lastName":"Potter","number":"0994372684","likes":["Hogwarts","Magic","Hagrid"]},{"firstName":"Kristian","lastName":"Vos","number":"unknown","likes":["JavaScript","Gaming","Foxes"]}]

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

console.log(lookUpProfile("Harry", "likes"));

【讨论】:

  • 嗯,但我不明白......为什么在外面......?为什么它不能在第一个 if... 的 else 中?这不是逻辑吗?以及为什么 for 停在那里..如果我不理解它的工作方式,我就无法编码..
  • @Ana 它在外面,好像没有一个联系人在循环中匹配然后只返回no contact found,如果有任何匹配的联系人你的函数不要事件来到这一行
  • @Ana In your current code if the first element of array doesn't match the current passed name than it goes to else block and return "No such contact" ( eventually just checks first element only ) 这行解释了为什么你需要把它放在循环之外
猜你喜欢
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-02
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 2012-11-13
相关资源
最近更新 更多