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. A2W,W2A等的使用

    #include <atlbase.h> #include <atlconv.h> 代码块 { ...... USES_CONVERSION; CString TempDirP ...

  2. Docker MySQL5.5镜像

    定制MySQL的镜像有个很大的难题:mysqld启动之前要初始化数据目录,5.5自带有空账号密码需要初始化. Dockerfile FROM centos # 拷贝需要的安装和MySQL初始脚本 CO ...

  3. ztree实现表格风格的树状结构

    zTree官方api: http://www.treejs.cn/v3/api.php 原理很简单:利用zTree的addDiyDom方法,自定义每个DOM节点,在原来的节点后面加一些div,再利用c ...

  4. Solr基本操作

    /update 使用/update进行索引维护,进入Solr管理界面SolrCore下的Document下: 我们进行更新操作可以用json和xml多种格式,这里以xml格式为例说明.先来看看界面上的 ...

  5. Python学习基础(二)——集合 深浅拷贝 函数

    集合 # 集合 ''' 集合是无序不重复的 ''' # 创建列表 l = list((1, 1, 1)) l1 = [1, 1, 1] print(l) print(l1) print("* ...

  6. nlp homework 03

    NLP Homework 03 --冯煜博 题目描述 (盒子和球模型)假设有3个盒子,每个盒子里装有红白两种颜色的球,盒子里的红白球有下表列出,初始状态分布. 解答 1. 给出HMM模型 \(\mu= ...

  7. 位运算之a^b

    题目链接:https://www.acwing.com/problem/content/91/ 参考链接:https://blog.csdn.net/chaiwenjun000/article/det ...

  8. PID算法控制简单理解

    1 传统的位式控制算法 用户期望值Sv(设定值)经控制算法输出一个输出信号OUT,输出信号加载到执行部件上(像MOS管等)对控制对象进行控制(步进电机.加热器等),控制对象的当前值(Pv)如速度通过传 ...

  9. Mac安装HomeBridge适配小米Homekit报错:module未找到解决

    Mac安装HomeBridge适配小米Homekit报错:module未找到 具体错误是: module.js:471 throw err; balabalal...... 问了一圈,终于解决,但是又 ...

  10. IDEA引入Gradle工程小记

    1.首先IDEA要在该工程Settings中配置本地安装的Gradle,配好其home目录,注意目录到根目录即可,不要到bin一级,否则提示错误,无法使用: 2.配置好后会自动侦测Gradle项目,点 ...