zoukankan      html  css  js  c++  java
  • FreeCodeCamp----Intermediate Algorithm Scripting解法

    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);
  • 相关阅读:
    二分图 洛谷P2055 [ZJOI2009]假期的宿舍
    并查集 洛谷P1640 [SCOI2010]连续攻击游戏
    贪心 洛谷P2870 Best Cow Line, Gold
    贪心 NOIP2013 积木大赛
    快速幂 NOIP2013 转圈游戏
    倍增LCA NOIP2013 货车运输
    树形DP 洛谷P2014 选课
    KMP UVA1328 Period
    动态规划入门 BZOJ 1270 雷涛的小猫
    KMP POJ 2752Seek the Name, Seek the Fame
  • 原文地址:https://www.cnblogs.com/jeacy/p/6622669.html
Copyright © 2011-2022 走看看