如果在JavaScript中找到对象数组,则返回对象的属性

Sam*_*ack 6 javascript arrays javascript-objects

我有以下对象数组:

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

我想定义一个函数lookUpProfile(firstName, prop),它对于输入数据:

lookUpProfile("Akira", "likes");
Run Code Online (Sandbox Code Playgroud)

将返回:

["Pizza", "Coding", "Brownie Points"]
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的解决方案,直到现在还没有回复:

function lookUpProfile(firstName, prop){
    for(var i = 0; i < contacts.length; i++){
        if(contacts[i].firstName == firstName){
            for(var j = 0; j < contacts[i].length; j++){
                if(contacts[i].hasOwnProperty(prop))
                    return prop;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有谁有任何想法来解决这个问题?谢谢

dfs*_*fsq 1

您的问题是您正在尝试使用带有数字索引的 for 循环来循环对象。你根本不需要第二个循环。它可以很简单

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

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