在freecode阵营检查站上查找配置文件

din*_*o_d 4 javascript arrays object

所以我正在通过freecodecamp,我正在解决那里的问题,继续编程循环,我偶然发现了一个障碍,我不太确定是什么问题.

所以我有一个名为contacts的对象数组,我需要创建一个名为的函数lookUp(firstName, prop).作业的文本是这样的:

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

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

如果firstName不对应任何联系人,则返回"没有此类联系人"

如果prop不对应任何有效的属性,则返回"No such property"

代码:

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");
Run Code Online (Sandbox Code Playgroud)

所以我循环遍历数组,for循环检查每个对象.在第一个if我检查firstName该对象的属性是否等于函数参数firstName,然后如果它是真的,我检查该对象是否具有该属性prop,我应该能够返回它.但似乎是这样

return contacts[i].prop;
Run Code Online (Sandbox Code Playgroud)

不工作,我有点迷失为什么.我确定这是微不足道的,但我不明白为什么.当我去控制台,并测试

contacts[0].likes
Run Code Online (Sandbox Code Playgroud)

我把阵列拿出来了["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";
    } 
  }
}
Run Code Online (Sandbox Code Playgroud)

但我仍然得到同样的错误:

din*_*o_d 9

好吧,我很笨,我太早退出了我的循环:

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";
}
Run Code Online (Sandbox Code Playgroud)

这有效.

  • @Jeannie我觉得你很困惑,因为`prop`是这个函数的一个变量.我让你成为一个小提琴来展示访问价值的不同方式:https://jsfiddle.net/mgqwj9g1/2/.继续练习它将来会变得更加清晰. (3认同)
  • 喔,哈哈,你看到你自己想出来了.不要觉得愚蠢,我们都会犯错误. (2认同)
  • 谢谢 - 这帮助我弄清楚我需要使用`return contacts [i] [prop]`而不是`return contacts [i] .prop` lol我希望在检查点更好地解释. (2认同)