JSON对象属性名与属性值的提取

来源:互联网 发布:阿里云主机管理控制台 编辑:程序博客网 时间:2024/05/21 10:32

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

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

函数将会检查通讯录中是否存在一个与传入的 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"]    }];
function lookUp(firstName, prop){    for(var i = 0;i<contacts.length;i++)  {       //如果firstName存在       if(firstName == contacts[i].firstName)       {          //在firstName存在的条件下,如果prop存在          if(contacts[i].hasOwnProperty(prop))          {            //返回prop的属性值            return contacts[i][prop];          }          //firstName存在但prop不存在         else         {           //返回 "No such property"           return "No such property";         }       }}//循环结束仍没有返回结果,说明firstName不存在,返回"No such contact"  return "No such contact";}//调用函数lookUp("Kristian", "lastName");

注意:在循环中逻辑关系较为复杂,一定要理清。尤其是容易写成以下代码:

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";                    }                }                return "No such contact";            }               }

这两段代码的区别就是第二段代码将return “No such contact”放在了for循环之中if语句之外,这样会造成在第一次循环中如果传入的firstName不是“Akira”的话,直接返回”No such contact”,而不去检查数组中其他的元素,造成逻辑错误。

另外,使用hasOwnProperty:是用来判断一个对象是否有你给出名称的属性或对象。不过需要注意的是,此方法无法检查该对象的原型链中是否具有该属性,该属性必须是对象本身的一个成员。

原创粉丝点击