Finders Keepers

写一个 function,它浏览数组(第一个参数)并返回数组中第一个通过某种方法(第二个参数)验证的元素。

如果你被卡住了,记得开大招 Read-Search-Ask。尝试与他人结伴编程、编写你自己的代码。

  1. function find(arr, func) {
  2. /*方法1*/
  3. for(var i=0; i<arr.length; i++){
  4. if(func(arr[i])){
  5. return arr[i];
  6. }
  7. }
  8. /*end方法1*/
  9. /*方法2*/
  10. arr=arr.filter(function(item){
  11. func(item);
  12. });
  13. return arr[0];
  14. /*end方法2*/
  15. }
  16. find([1, 3, 5, 8, 9, 10], function(num) { return num % 2 === 0; });

Drop it

让我们来丢弃数组(arr)的元素,从左边开始,直到回调函数return true就停止。

第二个参数,func,是一个函数。用来测试数组的第一个元素,如果返回fasle,就从数组中抛出该元素(注意:此时数组已被改变),继续测试数组的第一个元素,如果返回fasle,继续抛出,直到返回true。

最后返回数组的剩余部分,如果没有剩余,就返回一个空数组。

  1. function drop(arr, func) {
  2. //把arr复制给myArr,myArr用来删除
  3. //注意:数组是引用类型,不能直接赋值
  4. var myArr=arr.filter(function(item,index,array){
  5. return true;
  6. });
  7. for(var i=0; i<arr.length; i++){
  8. if(func(arr[i]) === false){
  9. myArr.shift();
  10. }else{
  11. return myArr;
  12. }
  13. }
  14. return myArr; //如果数组中所有的数都不能通过验证,myArr已是空数组,返回空数组
  15. }
  16. drop([1, 2, 3, 4], function(n) {return n > 3;});

Steamroller

对嵌套的数组进行扁平化处理。你必须考虑到不同层级的嵌套。

  1. function steamroller(arr) {
  2. var resultArray=[];
  3. //编写一个递归函数
  4. //如果数组的当前元素不是数组,应添加到结果数组中
  5. //如果是数组,调用自身
  6. function flag(myArr){
  7. myArr.forEach(function(item,index,array){
  8. if( !(item instanceof Array) ){
  9. resultArray.push(item);
  10. }else{
  11. flag(item);
  12. }
  13. });
  14. }
  15. flag(arr);
  16. return resultArray;
  17. }
  18. steamroller([1, {}, [3, [[4]]]]); //应该返回 [1, {}, 3, 4]

Binary Agents

传入二进制字符串,翻译成英语句子并返回。

二进制字符串是以空格分隔的。

  1. function binaryAgent(str) {
  2. var myArr=str.split(" ");
  3. myArr=myArr.map(function(item,index,array){
  4. //parseInt(item,2)把item按照二进制解析为十进制
  5. return String.fromCharCode( parseInt(item,2) );
  6. });
  7. return myArr.join("");
  8. }
  9. binaryAgent("01000001 01110010 01100101 01101110 00100111 01110100 00100000 01100010 01101111 01101110 01100110 01101001 01110010 01100101 01110011 00100000 01100110 01110101 01101110 00100001 00111111"); //应该返回 "Aren't bonfires fun!?"

Everything Be True

所有的东西都是真的!

完善编辑器中的every函数,如果集合(collection)中的所有对象都存在对应的属性(pre),并且属性(pre)对应的值为真。函数返回ture。反之,返回false。

记住:你只能通过中括号来访问对象的变量属性(pre)。

  1. function every(collection, pre) {
  2. return collection.every(function(item,index,array){
  3. return item.hasOwnProperty(pre) && Boolean(item[pre]);
  4. });
  5. }
  6. every([{"user": "Tinky-Winky", "sex": "male"}, {"user": "Dipsy", "sex": "male"}, {"user": "Laa-Laa", "sex": "female"}, {"user": "Po", "sex": "female"}], "sex"); //应该返回 true。

Arguments Optional

创建一个计算两个参数之和的 function。如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果。

例如,add(2, 3) 应该返回 5,而 add(2) 应该返回一个 function。

调用这个有一个参数的返回的 function,返回求和的结果:

var sumTwoAnd = add(2);

sumTwoAnd(3) 返回 5

如果两个参数都不是有效的数字,则返回 undefined。

  1. function add() {
  2. if(typeof arguments[0] !== "number" || (arguments.length > 1 && typeof arguments[1] !== "number")){
  3. return undefined;
  4. }
  5. if(arguments.length == 1){
  6. var arg0 = arguments[0];
  7. return function(num){
  8. if(typeof num !== "number"){
  9. return undefined;
  10. }
  11. return arg0 + num;
  12. };
  13. }else{
  14. return arguments[0] + arguments[1];
  15. }
  16. }
  17. add(2,3);

FreeCodeCamp----Intermediate Algorithm Scripting解法的更多相关文章

  1. FreeCodeCamp---advanced Algorithm Scripting解法

    Exact Change 设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) ...

  2. FreeCodeCamp 的 Basic Algorithm Scripting 题解(1)

    这是本人的原创文章,转载请注明原文链接http://www.cnblogs.com/wusuowiaaa1blog/p/5932121.html. 1.Reverse a String 翻转字符串 先 ...

  3. [Intermediate Algorithm] - Binary Agents

    题目 传入二进制字符串,翻译成英语句子并返回. 二进制字符串是以空格分隔的. 提示 String.charCodeAt() String.fromCharCode() 测试用例 binaryAgent ...

  4. [Intermediate Algorithm] - Arguments Optional

    题目 创建一个计算两个参数之和的 function.如果只有一个参数,则返回一个 function,该 function 请求一个参数然后返回求和的结果. 例如,add(2, 3) 应该返回 5,而 ...

  5. [Intermediate Algorithm] - Everything Be True

    题目 所有的东西都是真的! 完善编辑器中的every函数,如果集合(collection)中的所有对象都存在对应的属性(pre),并且属性(pre)对应的值为真.函数返回ture.反之,返回false ...

  6. [Intermediate Algorithm] - Steamroller

    题目 对嵌套的数组进行扁平化处理.你必须考虑到不同层级的嵌套. 提示 Array.isArray() 测试用例 steamroller([[["a"]], [["b&qu ...

  7. [Intermediate Algorithm] - Drop it

    题目 队友该卖就卖,千万别舍不得. 当你的队伍被敌人包围时,你选择拯救谁.抛弃谁非常重要,如果选择错误就会造成团灭. 如果是AD或AP,优先拯救. 因为AD和AP是队伍输出的核心. 其次应该拯救打野. ...

  8. [Intermediate Algorithm] - Finders Keepers

    题目 写一个 function,它浏览数组(第一个参数)并返回数组中第一个通过某种方法(第二个参数)验证的元素. 提示 Array.filter() 测试用例 find([1, 3, 5, 8, 9, ...

  9. [Intermediate Algorithm] - Smallest Common Multiple

    题目 找出能被两个给定参数和它们之间的连续数字整除的最小公倍数. 范围是两个数字构成的数组,两个数字不一定按数字顺序排序. 例如对 1 和 3 —— 找出能被 1 和 3 和它们之间所有数字整除的最小 ...

随机推荐

  1. js关于移入移出延迟提示框效果处理

    html部分 <div id="div1">我是导航君</div> <div id="div2" style="disp ...

  2. The Little Prince-12/05

    The Little Prince-12/05 "When a mystery is too overpowering, one dare not disobey. Absurd as it ...

  3. 使用Holer将本地端口映射到公网

    What is holer Holerexposes local servers behind NATs and firewalls to the public internet over secur ...

  4. Java用Jackson遍历json所有节点

    <!-- jackson begin --> <dependency> <groupId>com.fasterxml.jackson.core</groupI ...

  5. 人人网(cookie登录)

    有时候,我们在爬取一些网页之前必需要登录该网站,比如说我想爬取我的人人网主页内容. 1.打开:www.renren.com 2.输入用户名和密码,登录网站18679030315 3.个人首页,如下图: ...

  6. Linux内核启动流程与模块机制

    本文旨在简单的介绍一下Linux的启动流程与模块机制: Linux启动的C入口位于/Linux.2.6.22.6/init/main.c::start_kernel() 下图简要的描述了一下内核初始化 ...

  7. Django XSS攻击

    Django XSS攻击 XSS(cross-site scripting跨域脚本攻击)攻击是最常见的web攻击,其特点是“跨域”和“客户端执行”,XSS攻击分为三种: Reflected XSS(基 ...

  8. Python3 Pandas的DataFrame格式数据写入excle文件、json、html、剪贴板、数据库

    Python3 Pandas的DataFrame格式数据写入excle文件.json.html.剪贴板.数据库 一.DataFrame格式数据 Pandas是Python下一个开源数据分析的库,它提供 ...

  9. 【题解】Luogu P2147 [SDOI2008]洞穴勘测

    原题传送门 这题用Link-Cut-Tree解决,Link-Cut-Tree详解 我不太会踩爆Link-Cut-Tree的并查集做法qaq 我们用Link-Cut-Tree维护连通性(十分无脑) Co ...

  10. Nginx:论高并发,在座各位都是渣渣

    NGINX 在网络应用中表现超群,在于其独特的设计.许多网络或应用服务器大都是基于线程或者进程的简单框架,NGINX突出的地方就在于其成熟的事件驱动框架,它能应对现代硬件上成千上万的并发连接. NGI ...