文章目录

  • 一、使用递归创建一个倒计时
  • 二、使用递归来创建一个数字序列
  • 三、记录集合
  • 四、21点游戏
  • 五、高尔夫代码
  • 六、资料查找

一、使用递归创建一个倒计时

题目描述:

已经定义了一个函数 countdown,函数有一个参数(n)。 函数应该基于参数 n 递归调用返回 n 到 1 的连续数字的数组。 如果函数以小于 1 的参数调用,函数应该返回空数组。

测试要求:

输入一个参数n,最终返回数组[n,n-1,n-2,…,2,1],如调用 countdown(5),则输出 [5, 4, 3, 2, 1]

解决方案:

function countdown(n){if(n<1) {return [];} else {var arr=countdown(n-1);arr.unshift(n);return arr;}
}

二、使用递归来创建一个数字序列

题目描述:

已经定义好了 rangeOfNumbers 函数,包含两个参数。 函数应该返回一个连续数字数组,startNum 参数开始 endNum 参数截止。 开始的数字小于或等于截止数字。 函数必需递归调用自身,不能使用任意形式的循环。 要考虑到 startNum 和 endNum 相同的情况。

测试要求:

要在数组中输出 [startNum,endNum] 这个区间的整数,如果rangeOfNumbers(1, 4),输出数组 [1,2,3,4]
如果rangeOfNumbers(5, 5),即相等,输出数组 [5]

解决方案:

function rangeOfNumbers(startNum, endNum) {if(startNum==endNum){return [startNum]}else {var arr=rangeOfNumbers(startNum,endNum-1);arr.push(endNum);return arr}
}

三、记录集合

题目描述:

给定一个对象,用来表示部分音乐专辑收藏。 每张专辑都有几个属性和一个唯一的 id 号作为键值。 并非所有专辑都有完整的信息。
以 updateRecords 函数开始,这个函数需要一个对象 records,包含一个音乐专辑集合,一个 id,一个 prop(如 artist 或 tracks),和一个 value。 使用下面的规则完成函数来修改传递给函数的对象。

规则描述:

  • 函数必须始终返回整个音乐专辑集合对象。
  • 如果 prop 不是 tracks 并且 value 不是一个空字符串, 将专辑的 prop 更新-或设置为 value。
  • 如果 prop 是 tracks 但专辑没有 tracks 属性,则应创建空数组并为其添加 value。
  • 如果 prop 是 tracks 并且 value 不是一个空字符串,将 value 添加到专辑现有 tracks 数组的末尾。
  • 如果 value 是空字符串,从专辑里删除指定的 prop。

测试要求:

测试用例 结果
updateRecords(recordCollection, 5439, “artist”, “ABBA”) artist 的值应该是字符串 ABBA
updateRecords(recordCollection, 5439, “tracks”, “Take a Chance on Me”) tracks 的最后一个元素应该为字符串 Take a Chance on Me
updateRecords(recordCollection, 2548, “artist”, “”) artist 不应被设置为任何值
updateRecords(recordCollection, 1245, “tracks”, “Addicted to Love”) tracks 的最后一个元素应该为字符串 Addicted to Love
updateRecords(recordCollection, 2468, “tracks”, “Free”) tracks 的第一个元素应该为字符串 1999
updateRecords(recordCollection, 2548, “tracks”, “”) tracks 不应被设置为任何值
updateRecords(recordCollection, 1245, “albumTitle”, “Riptide”) albumTitle 的值应该是字符串 Riptide

解决方案:


var recordCollection = {2548: {albumTitle: 'Slippery When Wet',artist: 'Bon Jovi',tracks: ['Let It Rock', 'You Give Love a Bad Name']},2468: {albumTitle: '1999',artist: 'Prince',tracks: ['1999', 'Little Red Corvette']},1245: {artist: 'Robert Palmer',tracks: []},5439: {albumTitle: 'ABBA Gold'}
}
function updateRecords(records, id, prop, value) {if(value=='') {delete records[id][prop]} else if (prop!="tracks"){records[id][prop]=value} else if (prop=='tracks') {if(!records[id].hasOwnProperty('tracks')) {records[id][prop] = []}records[id][prop].push(value)}return records
}updateRecords(recordCollection, 5439, 'artist', 'ABBA')

注意:要先判断value是否为空值,否则每一步都要判断是否为空


四、21点游戏

算法描述:

在赌场 21 点游戏中,玩家可以通过计算牌桌上已经发放的卡牌的高低值来让自己在游戏中保持优势。 这就叫 21 点算法

题目描述:

写一个函数实现 21 点算法。 它根据参数 card 的值(见表格,可能是数字或者字符串)来递增或递减全局变量 count。 然后函数返回一个由当前 count(计数)和 Bet(当 count > 0 时)或 Hold(当 count <= 0 时) 拼接的字符串。 注意 count(计数)和玩家的决定(Bet 或 Hold)之间应该有空格。

规则描述:

牌桌上的大值的卡牌更多,对玩家有利。 根据下面的表格,每张卡牌都被分配了一个值。 如果卡牌的值大于 0,那么玩家应该追加赌注。 如果卡牌的值为 0 或负数,玩家应该追加少许赌注甚至不追加赌注。

计数 卡牌
+1 2, 3, 4, 5, 6
0 7,8,9
-1 10, ‘J’, ‘Q’, ‘K’, ‘A’

测试要求:

调用cc(n)结果为:-3 Hold 或者 5 Bet

解决方案:

let count = 0;function cc(card) {switch (card) {case 2:case 3:case 4:case 5:case 6:count++breakcase 10:case "J":case "Q":case "K":case "A":count--break}if (count <= 0) {return count + " Hold"}return count + " Bet"
}cc(2); cc(3); cc(7); cc('K'); cc('A');

注意:当card的值为7,8,9时,不增也不减,此时可忽略。Bet指继续加赌注,Hold指不追加赌注,根据计算后的值判断是否追加赌注。


五、高尔夫代码

题目描述:

在高尔夫游戏中,每个洞都有自己的标准杆数 par,代表着把球打进洞所挥杆的平均次数 strokes。 根据你把球打进洞所挥杆的次数 strokes 高于或低于 par 多少,有一个不同的昵称(代表打高尔夫球的水平)。

规则描述:

函数将会传送两个参数,par 和 strokes。 根据下表返回正确的字符串。下表列出不同挥杆次数(从高到低)对应的字符串。

挥杆次数 返回字符串
1 “Hole-in-one!”
<=par -2 “Eagle”
par - 1 “Birdie”
par “Par”
par+1 “Bogey”
par+2 “Double Bogey”
>= par + 3 “Go Home!”

测试要求:

测试 结果
golfScore(4, 1) Hole-in-one!
golfScore(4, 2) Eagle
golfScore(5, 2) Eagle
golfScore(4, 3) Birdie
golfScore(4, 4) Par
golfScore(1, 1) Hole-in-one!
golfScore(5, 5) Par
golfScore(4, 5) Bogey
golfScore(4, 6) Double Bogey
golfScore(4, 7) Go Home!

解决方案:

const names = ["Hole-in-one!", "Eagle", "Birdie", "Par", "Bogey", "Double Bogey", "Go Home!"];function golfScore(par, strokes) {if (strokes == 1)return "Hole-in-one!";else if (strokes <= par - 2)return "Eagle";else if (strokes == par - 1)return "Birdie";else if (strokes == par)return "Par";else if (strokes == par + 1)return "Bogey";else if (strokes == par + 2)return "Double Bogey";else if (strokes >= par + 3)return "Go Home!";
}golfScore(5, 4);

注意:par 和 strokes 必须是数字而且是正数。


六、资料查找

题目描述:

我们有一个对象数组,里面存储着通讯录。lookUpProfile 函数已经写好了参数,需要 name 和属性 (prop) 参数。函数将会检查通讯录中是否存在一个 firstName 与传入的 name 相同的联系人。

测试要求:

  • 如果name存在,那么还需要检查对应的联系人中是否存在 prop 属性
  • 如果它们都存在,函数返回 prop 属性对应的值。
  • 如果 name 不对应于任何联系人,然后返回字符串 No such contact。
  • 如果 prop 属性在匹配 name 的联系人里不存在,返回 No such property。

解决方案:

// 设置
const 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) {for (var i = 0; i < contacts.length; i++) {if (name == contacts[i]["firstName"]) {if (contacts[i].hasOwnProperty(prop)) {return contacts[i][prop];} else {return "No such property";}}}return "No such contact";
}lookUpProfile("Akira", "likes");

为什么不能用下面这段代码段?

这个代码段的作用就只是判断第一个对象是否满足要求,与题目要求不符合

    function lookUpProfile(name, prop) {for (var i = 0; i < contacts.length; i++) {if (name == contacts[i]["firstName"]) {if (contacts[i].hasOwnProperty(prop)) {return contacts[i][prop];} else {return "No such property";}} else {return "No such contact";}}}

注意:

  1. .hasOwnProperty()括号里直接为属性名 不要加引号

  2. 你的代码运行后是否除了输入name=Akira之外的name属性值一直显示 “No such contact”?

原因在于你把 return “No such contact”; 这条语句放到for循环里面了!这个时候只是遍历了对象数组的第一个元素,也就是说,这个函数的作用只是判断第一个对象是否满足要求…这不是我们所希望的,我们希望的是它能遍历完所有的对象…所以应该等它都遍历完(即把 return “No such contact” 这条语句放到for循环外面),如果都不满足则返回 “No such contact”.

  1. 你的代码运行后是否一直显示undefined?

查看你的return语句是否这样写的 : return contacts[i].prop; 因为prop是形参,对应的实参题目中给的是字符串类型, 点(.) 运算符后面不能接字符串的, 所以正确写法: return contacts[i][prop]


看到这啦,如果觉得还行就点个赞啦!!!如有其他不同想法可评论

freeCodeCamp——JavaScript基础练习相关推荐

  1. JavaScript基础笔记集合(转)

    JavaScript基础笔记集合 JavaScript基础笔记集合   js简介 js是脚本语言.浏览器是逐行的读取代码,而传统编程会在执行前进行编译   js存放的位置 html脚本必须放在< ...

  2. javascript基础语法——表达式

    前面的话 一般地,关于javascript基础语法,人们听得比较多的术语是操作符和语句.但是,其实还有一个术语经常使用,却很少被提到,这就是javascript表达式(expression).本文将详 ...

  3. Javascript基础与面向对象基础~第四讲 Javascript中的类对象

    今天来说JS中如何实现类(class),事实上本应该昨天晚上写的,可我失言了,在些说一声"抱歉"!JS中的类是JS面向对象的基础,也是我最拿手的东西,你写的代码能否提高一个层次,一 ...

  4. javascript基础系列(入门前须知)

    -----------------------小历史---------------------------- javascript与java是两种语言,他们的创作公司不同,JavaScript当时是借 ...

  5. JavaScript基础系列---闭包及其应用

    闭包(closure)是JavaScript中一个"神秘"的概念,许多人都对它难以理解,我也一直处于似懂非懂的状态,前几天深入了解了一下执行环境以及作用域链,可戳查看详情,而闭包与 ...

  6. 夯实JavaScript基础之prototype, __proto__, instanceof

    function New(f){return function(){var o = {'__proto__': f.prototype};f.apply(o, arguments);return o; ...

  7. JavaScript基础,Cookies,Sessions

    php和JavaScript,掌握JavaScript基础,自定义函数,流程控制语句,事件,调用JavaScript脚本,在PHP中使用JavaScript. JavaScript是网景公司开发的,是 ...

  8. JavaScript基础一

    1.1 javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) J ...

  9. Web前端-JavaScript基础教程上

    Web前端-JavaScript基础教程 将放入菜单栏中,便于阅读! JavaScript是web前端开发的编程语言,大多数网站都使用到了JavaScript,所以我们要进行学习,JavaScript ...

最新文章

  1. stl set求交集 并集 差集
  2. linux sh 字符截取,shell字符截断
  3. sql 相加_SQL多表查询
  4. 【渝粤题库】国家开放大学2021春2224物业管理法规题目
  5. 最大最小距离算法(K-MEANS K-medoids )聚类算法的结合运用
  6. java 3d模型插件_3D模型整合插件 Kitbasher V1.2 支持3DS MAX 2012~2018
  7. java中线程总结,JAVA中线程的相关小结
  8. 实践经验:应该如何使用Docker?
  9. HttpClient 模拟登录网易微博
  10. arch linux windows,windows+Archlinux双系统安装指南(一)
  11. linux的多任务编程-线程池,Linux的多任务编程-线程池
  12. day73 中间件 以及模板引擎
  13. java canvas数组_java数组
  14. 千万不要花费时间和金钱学习火山软件开发平台 - 递归软件绝非易语言的延续!
  15. 如何判断一个数是素数(质数)
  16. 笔记本电脑换内存条流程
  17. WLC RTU license
  18. 计算机主机是几几年的怎么查,怎样查询电脑上次开机时间_电脑开机时间查询方法-系统城...
  19. 教育资源平台空间装扮html代码,一看就会—— 河南省基础教育资源公共服务平台“人人通空间”...
  20. java:获取两个日期相隔天数

热门文章

  1. 在Google Daydream上用VR观看Youtobe视频吧!
  2. 团队开发神器Git全功能介绍
  3. 湖科大 2022 计算机网络期末复习资料
  4. swift perfect mysql_Swift Perfect服务器开发(解决一切疑难杂症)
  5. 20春计算机在线平时1答案,大工20春《计算机原理》在线作业1答案
  6. 使用百度地图API计算两点直线距离、道路距离和行车时间
  7. 基于Django的员工管理系统
  8. jackson转换json大写_jackson json序列化 首字母大写 第二个字母需小写
  9. cf英文名字格式好看的_cf好听的英文名字分享 让你起合适的名字
  10. python在txt文件中提取段落_如何使用python从.txt文件中提取段落?