【问题标题】:Profile lookup on freecode camp checkpoint [closed]免费代码营地检查点上的配置文件查找[关闭]
【发布时间】:2016-01-14 19:33:43
【问题描述】:

所以我正在通过 freecodecamp 并解决那里的问题,以保持与编程的循环,我偶然发现了一个障碍,我不太确定出了什么问题。

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

该函数应检查firstName 是否是实际联系人的firstName,并且给定的属性(prop)是该联系人的属性。

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

如果firstName 不对应任何联系人,则返回“No such contact”

如果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";
    } 
  }
}

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

【问题讨论】:

  • 不,这与所讨论的“重复”完全无关,我回来得太早了:)
  • 这个问题是在 2 年前提出的......
  • 是的,实际上,> 2.5 年前,这使得这次谈话没有那么有用。大多数情况下,我看到这个问题被认为是一个错字而被关闭。如果可能的话,我更喜欢将事物关闭为重复项,作为路标。在这种情况下,我太渴望做到这一点。对此感到抱歉。
  • 是的,没问题,不知道为什么突然有这么多关闭投票:D 我很好,只要有帮助,帖子被关闭或打开 :)

标签: javascript arrays object


【解决方案1】:

好吧,我很笨,我退出 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";
}

这行得通。

【讨论】:

  • 哦,哈哈,你自己想出来的。别傻了,我们都会犯错。
  • 谢谢 - 这帮助我弄清楚我需要使用 return contacts[i][prop] 而不是 return contacts[i].prop 哈哈,我希望在检查点能更好地解释这一点。
  • @Jeannie 我想你很困惑,因为prop 是这个函数中的一个变量。我已经让您展示了访问值的不同方式:jsfiddle.net/mgqwj9g1/2。继续练习,以后会越来越清晰。
  • @Mikey wow ok 是的,我认为这只会在实践中变得更加清晰。感谢您分别布置每个。这绝对有帮助。
【解决方案2】:

我认为您对 return 的作用感到困惑。你的代码只会做一次迭代和return "No such contact"。 Return 立即停止函数的执行。这是我用console.loghttps://jsfiddle.net/oegw3a4y/展示的意思的小提琴

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

【讨论】:

    【解决方案3】:
    function lookUp(firstName, prop){
      var ans="";
      for(var i=0;i<contacts.length;i++){
    
    //if firstname matches,fetch the property
    if(contacts[i].firstName==firstName)
      {
        //in the item matched with first name check if the property is there or not.
        if(contacts[i].hasOwnProperty(prop))
        {
           ans=contacts[i][prop];
        }
        else{
          ans="No such property";
        }
    
      }
      }
    
      // if no contact found after searching entire collection.then ans will be empty
      if(ans==="") ans="No such contact";  
      return ans;
    }
    

    【讨论】:

      【解决方案4】:

      返回调用必须是堆栈中的最后一件事。以上将不起作用,因为函数在循环可以迭代到下一个增量之前返回“No such contact”!以下作品:

      //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(firstName, prop){
      // Only change code below this line
        for ( var i = 0; i <= 3; i++ ) {
          if (contacts[i].firstName == firstName) {
            if ( contacts[i].hasOwnProperty(prop) === true) {
              return contacts[i][prop];
              } 
              return "No such property";
      
          }    
        }
        return "No such contact";
      // Only change code above this line
      }
      
      // Change these values to test your function
      lookUpProfile("Akira", "likes");
      

      【讨论】:

      • Jup,我知道你可以查看answer ;)
      【解决方案5】:

      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)&&
               (contacts[i].hasOwnProperty(prop)===true)){
                   return contacts[i][prop];
             }else if(contacts[i].hasOwnProperty(prop)===false){
                return "No such property" ;
             } 
         }
             return "No such contact" ;
      }
      
      lookUpProfile("Akira", "likes");

      【讨论】:

      • 请在更正后的代码中添加说明。这提高了答案的质量,并且对于可能有类似问题的其他人来说更容易理解。谢谢!
      【解决方案6】:
      function lookUpProfile(firstName, prop){
      // Only change code below this line
      for (var i = 0; i < contacts.length; i++) {
        if (firstName === contacts[i].firstName && contacts[i].hasOwnProperty(prop)) {
          return contacts[i][prop];
        }
      }
      
      for (var j = 0; j < contacts.length; j++) {
        if (firstName === contacts[j].firstName && contacts[j].hasOwnProperty(prop) === false) {
          return 'No such property';
        }
      }
          return 'No such contact';
      // Only change code above this line
      }
      

      【讨论】:

      • 请解释你的代码,它的作用等等。
      【解决方案7】:

      这就是我使用 FCC 迄今为止提供的工具所做的事情。

      var o = "";
      
      function lookUp(firstName, prop) {
      for (i = 0; i <= contacts.length - 1; i++) {
             if (firstName === contacts[i].firstName && (contacts[i][prop])) {
                 return (contacts[i][prop]);
         }
         }
      // if property look up returns undefined type then there is no such property
              if ((contacts[0][prop]) === undefined) {
               o = "No such property";
           } else {
               o = "No such contact";
           }   
          return o;   
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-31
        • 2011-02-12
        • 1970-01-01
        • 2010-09-10
        • 1970-01-01
        • 2018-11-28
        • 1970-01-01
        相关资源
        最近更新 更多