FreeCodeCamp:Profile Lookup

Posted Qimz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FreeCodeCamp:Profile Lookup相关的知识,希望对你有一定的参考价值。

task:

我们有一个对象数组,里面存储着通讯录。

函数 lookUp 有两个预定义参数:firstName值和prop属性 。

函数将会检查通讯录是否存在一个联系人的firstName属性等于firstName值,还会检查对应联系人是否存在 prop属性。

如果它们都存在,函数返回prop属性对应的值。

如果firstName 值不存在,返回 "No such contact"

如果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": ["Intriguing Cases", "Violin"]
    },
    {
        "firstName": "Kristian",
        "lastName": "Vos",
        "number": "unknown",
        "likes": ["javascript", "Gaming", "Foxes"]
    }
];


拿到题目后首先用了for循环,下面是代码。

    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‘;
            }
        }
    }

 

按提交后显示了错误。之后拿去打了个断点发现存在两个问题。
Q1:contacts[i].prop 返回一直都是undefined

  有两个可能导致这个问题。一是上面的if条件写错。二是contacts[i].prop表达式不合法。

  由于if条件可以正常返回true or false 所以排除这个原因。然后我改用contacts[i][prop]显示了正确结果。经过自己的测试对比发现 点操作 并不能用于通过变量获取属性。举个栗子。

    var arr = [
        {
            "name": ‘qi‘,
            "hobby":[‘a‘,‘b‘,‘c‘]
        }, {
            "name": ‘zz‘,
            "hobby": [‘x‘, ‘y‘, ‘z‘]
        }
    ];
    var str = ‘hobby‘;
    if (arr[0].hasOwnProperty(‘hobby‘)) {
        alert(arr[0][str]); //a,b,c
        alert(arr[0].str); //undefined
    }

  而[]中括号操作符却可以做到。当通过变量名访问属性的时候,不需要给变量名包裹引号。因为实际上我们使用的是变量的值,而不是变量的名称。但用普通方式获取属性的时候需要加引号:arr[0][‘hobby‘]

Q2:for循环执行一次整个函数就返回。还未遍历到想要查找的联系人就已经退出了。必须该返回的时候返回,不该返回的时候继续往下执行。如果要用for循环也只能在循环里设置一个return出口。

  思路是先找出符合firstName的一个组。后判断这个组里是否有prop属性。如果有则返回。

    function lookup(firstName,prop){
        var result=contacts.filter(function(item){
            return item.firstName==firstName;
        });
        if(flag.length){
            //符合的结果组只有一个
            return result[0][prop]?result[0][prop]:‘no such property‘
        }
        return ‘no such contact‘;
    }

 

以上是关于FreeCodeCamp:Profile Lookup的主要内容,如果未能解决你的问题,请参考以下文章

look+this+is+my+bag,look加感叹号this是大写还是小写?

look look C#7

正则表达式之前瞻后顾(look around)

db2look详解

每日一练(day11&look look Arrary.sort())

网易云紧跟直播步伐,look直播全面上线