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);
  • 相关阅读:
    MongoDB 删除文档
    MongoDB 删除文档
    C#标记 [已弃用] 的方法
    C#标记 [已弃用] 的方法
    MySQL 正则表达式
    MySQL 正则表达式
    SQLcase when then用法
    SQLcase when then用法
    衣服尺码自定义排序sql
    衣服尺码自定义排序sql
  • 原文地址:https://www.cnblogs.com/jeacy/p/6622669.html
Copyright © 2011-2022 走看看