资讯专栏INFORMATION COLUMN

2017.02.13 JS学习

terasum / 1255人阅读

摘要:今天在第步上花了个多小时,好在最后完成了,现把问题和记录下来。循环还要多多练习。前提是之前的判断中的其他情况会

今天在 FreeCodeCamp 第215步上花了1个多小时,好在最后完成了,现把问题和code记录下来。

题目:

Profile Lookup
We have an array of objects representing different people in our contacts lists.
A lookUpProfile function that takes firstName and a property (prop) as arguments has been pre-written for you.
The function should check if firstName is an actual contact"s firstName and the given property (prop) is a property of that contact.
If both are true, then return the "value" of that property.
If firstName does not correspond to any contacts then return "No such contact"
If prop does not correspond to any valid properties then return "No such property"

//Setup
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(firstName, prop){
// Only change code below this line

// Only change code above this line
}

// Change these values to test your function
lookUpProfile("Akira", "likes");
lookUpProfile("Kristian", "lastName");
lookUpProfile("Sherlock", "likes");
lookUpProfile("Harry", "likes");
lookUpProfile("Bob", "likes");
lookUpProfile("Bob", "address");
遇到问题:

一开始把firstName和prop的判断写在了一个for循环下,结果导致如果firstName不是在第一个object中,则直接返回"No such contact",不再继续查找数组。

解决方法:

先将所有firstName存入一个数组,判断firstName是否存在,如果不存在,则直接返回"No such contact",如果存在,则再引入for循环,在for循环中判断是否存在prop.

function lookUpProfile(firstName, prop){
// Only change code below this line
//将所有firstName存入数组
  var storeFirstName = []; 
for (var i = 0; i < contacts.length; i++){
  
    storeFirstName.push(contacts[i].firstName); 

} 
//创建方法,用来判断数组中是否存在某个值     
  function contains(arr, obj) {  
    var i = 0;  
    while (i < arr.length) {  
        if (arr[i] === obj) {  
          
            return true;
        }
      i++;
    }  
    return false;  
}       

  
if (contains(storeFirstName, firstName))//firstName 存在于contacts中
  {
    for (var j = 0; j < contacts.length; j++){
      
      if(contacts[j].firstName === firstName) { //找到目标firstName所在的object            
        if (contacts[j].hasOwnProperty(prop)){ //object中存在目标prop
        
          return contacts[j][prop];
          
        }
        else {
          
          return "No such property"; //object中不存在目标prop
        }
      }
     
      
    }
  }
  else {  //firstName 不存在于contacts中
    return "No such contact"; 
  }
// Only change code above this line
}
心得:

写文章先在本地写,然后再复制到网页中(不小心按到返回,也是没谁了,多花了20分钟重写)。

循环还要多多练习。

与object.hasOwnProperty不同,数组需要判断是否存在值时,可引入 contains 方法:

function contains(arr, obj) {  
        var i = 0;  
        while (i < arr.length) {  
            if (arr[i] === obj) {  
              
                return true;
            }
          i++;
        }  
        return false;  
    }
2017.02.14 How stupid am I !

今早起来才想起来,把return “No such contact”放在 for循环外,等for循环结束找不到firstName,会直接返回 “No such contact”.

function lookUpProfile(firstName, prop){
// Only change code below this line
 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";
// Only change code above this line
}

nested 判断中,最外部的判断中false的情况,可以直接在最后。前提是之前的判断中的其他情况会terminate function.

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81499.html

相关文章

  • Luxon 初步介绍(Moment 团队日期另一个类库)

    摘要:我不是的深度用户只是日常会遇到一些时间格式化的需求之前用的都是不过对的感到有些不舒服同事介绍过里边用不可变数据的风格设计的所以就试试上星星很多请放心食用是项目的某个维护者开发的按照他个人想法进行了改进除了不可变性使用的工具做了更新也尝试到时 我不是 Moment 的深度用户, 只是日常会遇到一些时间格式化的需求,之前用的都是 Moment, 不过对 Moment 的 mutable A...

    stormzhang 评论0 收藏0
  • Javascript 注释规范

    摘要:代码注释规范一语法注释的说明语法写在注释块第一行这是注释的说明切换音频播放状态播放停止省略其它代码标签语法标签的说明语法说明文字学生学生的名字类型语法可与标签结合使用,如必传参数可选参数语法可与标签结合使用,如必传参数可选参数参数有 Javascript 代码注释规范 一、语法 1. 注释的说明 语法:写在注释块第一行 /** * events-function(这是注释的说明) ...

    ChanceWong 评论0 收藏0
  • 初学者学习JAVASCRIPT很吃力怎么办?到底该如何学习JS

    摘要:给初学者的印象总是那么的杂而乱,相信很多初学者都在找轻松学习的途径。通常学了很久的基础之后,变量函数对象你也都略知一二,但一到公司开发项目的时候,却又难以下手。 Js给初学者的印象总是那么的杂而乱,相信很多初学者都在找轻松学习Js的途径。在这里给大家总结一些学习Js的经验,希望能给后来的学习者探索出一条轻松学习Js之路。Js给人那种感觉的原因多半是因为它如下的特点:A:本身知识很抽象、...

    WrBug 评论0 收藏0
  • 学习 Next.js: 入门

    摘要:原始文档在现在搬过来学习入门学习页面之间的导航学习使用共享组件学习创建动态内容学习使用路由掩码创建干净的学习干净的服务器支持学习获取数据学习部署哪位分高的帮忙创建一个的标签谢谢现暂时放在标签下面了新建文章有时间限制一会全部发上来这是最近两天 原始文档在 https://github.com/developerw... 现在搬过来. 学习 Next.js: 入门学习 Next.js: ...

    Miracle 评论0 收藏0
  • 学习 Next.js: 创建动态内容

    摘要:原始文档在现在搬过来学习入门学习页面之间的导航学习使用共享组件学习创建动态内容学习使用路由掩码创建干净的学习干净的服务器支持学习获取数据学习部署创建动态页面现在我们知道了如何使用多个页面创建一个基本的应用程序为了创建页面我们需要在磁盘上创建 原始文档在 https://github.com/developerw... 现在搬过来. 学习 Next.js: 入门学习 Next.js: ...

    caohaoyu 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<