如果/else逻辑顺序 - JavaScript示例 - 请说明这两个代码块之间的区别



我已经花了几个小时尝试理解这一点 - 我知道这与... else语句逻辑顺序有关,但是每次我尝试跟随我都会迷路。有人请向我解释一下,如果可能的话,请给出一个指针,即如果...否则逻辑顺序(一种hack/Quick方法要记住例如:"始终从较大的样本空间开始...")

这里是:

任务如下:我们有一系列代表对象 我们的联系人列表中的不同人。

将FirstName和属性(Prop)作为lookupprofile函数作为 争论已被预先为您编写。

该功能应检查FirstName是否是实际联系人 FirstName和给定属性(Prop)是该联系人的属性。

如果两者都为true,则返回该属性的"值"。

如果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": ["Intriguing Cases", "Violin"]
        },
        {
            "firstName": "Kristian",
            "lastName": "Vos",
            "number": "unknown",
            "likes": ["Javascript", "Gaming", "Foxes"]
        }
    ];
    
    function lookUpProfile(firstName, prop){
      
      for(var i=0;i < contacts.length;i++){
        
        if (contacts[i].hasOwnProperty(prop))
          {
            if(contacts[i].firstName === firstName){
              return contacts[i][prop];
            }
            else {
              return "No such contact";
            }
    
          }
    // Only change code above this line
    }
      return "No such property";
    }
    // Change these values to test your function
    console.log(lookUpProfile("Harry", "likes"));

此代码是正确的:

    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(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";
            }
    
          }
    // Only change code above this line
    }
      return "No such contact";
    }
    // Change these values to test your function
    console.log(lookUpProfile("Harry", "likes"));

如果有人可以帮助我解释差异,我将非常感谢。预先感谢您!

这些代码的差异是使用条件。在失败的代码中,如果用户名与通过参数的名称不匹配,则您将从函数中返回。因此,当第一个项目无法匹配时,它将返回。

if (contacts[i].hasOwnProperty(prop))
  { 
    //INCORRECT USE OF NAME CHECK IF CONDITION
    if(contacts[i].firstName === firstName){
      return contacts[i][prop];
    }
    else {
      return "No such contact";
    }
  }

在第二个名字匹配时,您才会返回。

//CORRECT USE OF IF CONDITION FOR NAME CHECK
if (contacts[i].firstName === firstName)
      {
        if(contacts[i].hasOwnProperty(prop)){
          return contacts[i][prop];
        }
        else {
          return "No such property";
        }
      }
    if (contacts[i].hasOwnProperty(prop))
      {
        if(contacts[i].firstName === firstName){
          return contacts[i][prop];
        }
        else {
          return "No such contact";
        }

因此,当它与likes遇到联系时,但是firstName不等于" Harry",它将立即返回"无联系"。

如果对象包含指定属性,则hasOwnProperty()方法返回对或false。在正确的版本中,您正在寻找Harry中返回true的属性(喜欢)。在无效的一个中,您正在寻找尚未指定的对象的属性,因此它将始终为false。

最新更新