三元声明未返回正确的数据

时间:2019-11-29 10:33:09

标签: javascript object ecmascript-6

您好,我正在尝试解决以下问题:

我的函数应执行以下操作:

  1. 检查姓名是否是实际联系人的名字,并且给定属性(prop)是该联系人的属性。

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

  3. 如果姓名与任何联系人都不对应,则返回“没有此类联系人”。

  4. 如果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(name, prop){
contacts.forEach((block) => {
    ((name === block.firstName) && (block.hasOwnProperty(prop))) ? block[prop] : "no such property"
   })
return "no such contact"
}

lookUpProfile("Akira", "likes");

我不确定为什么它不起作用,我试图做一个三元声明并使用短路运算符。

提前谢谢

1 个答案:

答案 0 :(得分:1)

首先使用find方法检索联系人。然后,如果找到了某些内容,则可以继续检查它是否具有'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(name, prop) {
    const found = contacts.find( (block) => {
    return (block.firstName === name)
  });

  if ( found !== undefined ){
    if (found.hasOwnProperty(prop)){
        return found[prop];
    } else {
        return 'No such property'
    }
  } else {
    return 'No such contact';
  }
}

lookUpProfile("Sherlock", "likes");