FreeCodeCamp基础算法题答案解析

Reverse a String翻转字符串


function reverseString(str) {
    return str.split("").reverse().join("");
}

Factorialize a Number阶乘


function factorial(num){
  if(num<0){
    num=-1;
  }
  else if(num==0 || num==1){
    num=1;
  }
  else{
    for(var i=num-1; i>=1; i++){
      num*=i;
    }
  }
  return num;
}

Check for Palindromes回文检验


function palindrome(str) {
     //去掉非字母数字、空白字符和下划线
    str = str.replace( /[\W\s_]/g,"").toLowerCase();
    return str === str.split("").reverse().join("");
}

Find the Longest Word in a String寻找句中最长单词

得到最长单词的长度。


function findLongestWord(str){
  var array=str.split(' ');
   array.sort(function(a,b){
    return b.length-a.length;
  })
  return array[0];
}

Title Case a Sentense句中单词首字母大写


function titleCase(str) {
    var arr=str.toLowerCase().split(" ");
    var narr=[];
    for(var i=0;i<arr.length;i++){
        arr[i]=arr[i][0].toUpperCase()+arr[i].slice(1);
        }//首字母大写+截取第二到最后一个字母
    return arr.join(" ");
}

Return Largest Numbers in Arrays获得数组的每个子数组中最大的数字


function largestOfFour(arr){
var array=[];
for(var i=0; i<arr.length;i++){       //遍历
    arr[i].sort(function(a,b){
      return b-a;                     //排序
    })
  array.push(arr[i][0]);              //取值
  }
  return array;                       //返回
}

Confirm the Ending检测一个字符串是否以另一个字符串结尾


function confirmEnding(str, target) {
    //substr(start,end); str长度减去target长度=start,target长度=end
    return target===str.substr(str.length-target.length,target.length);
}

Repeat a string重复字符串


function repeat(str, num) {
    var strn="";
    var i=0;
    while(i<num){
        strn+=str;
        i++;
    }
    return strn;
}

 

Truncate a string截断字符串

function truncate(str,num){
  var string="";
  if(num<str.length){
    if(num<=3){
      string=str.slice(0,num)+"...";
    }
    else{
      string=str.slice(0,num-3)+"...";
    }
    return string;
  }
  return str;
}

如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。
切记,插入到字符串尾部的三个点号也会计入字符串的长度。
但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。


Chunky Monkey将数组元素分成指定个数的子数组

将数组元素(根据给定的元素个数(示例代码中的size))划分为若干个子数组,如果最后一组数组元素个数不够,也算成一组。


function chunk(arr, size) {
    var narr=[];
    for(var i=0;i<arr.length;i+=size){
        narr.push(arr.slice(i,i+size));
    }//隔size个元素划分一次(push到新数组中)
    return narr;
}

Slasher Flick从数组中去掉指定个数元素

从数组中去掉前n个元素,得的到新数组。


function slasher(arr, howMany) {
    return arr.slice(howMany);
    //或者    //return arr.splice(howMany);
}

Mutations一个字符串中是否包含另一个字符串中的所有字符

忽略顺序和大小写。示例代码中的两个字符串是一个数组的两个元素,如:["str1","str2"]。题目见fcc-mutations


function mutation(arr) {
    for(var i=0;i<arr[1].length;i++){
        if(arr[0].toLowerCase().indexOf(arr[1][i].toLowerCase())===-1){
            return false;
        }//将字符串2中的每一个字符与字符串一的
    }
  return true;
}

Falsy Bouncer去除数组中的假值元素


function bouncer(arr){
  return arr.filter(Boolean);
}

JavaScript中,假值有falsenull0""undefined 和 NaN

Seek and Destroy从数组中删除指定元素

例如从数组[1,2,3]中删除1,2:destoryer([1,2,3],2,3)


function destroyer(arr) {
    var narr = [];
    for(var i = 1; i < arguments.length; i++){
        narr.push(arguments[i]);
    }
    narr = arr.filter(function(item,index,array){
        return narr.indexOf(item) ===-1;//从narr中选出在arr中找不到的元素
    });
    return narr;
}

Where do I belong判断一个数字在数组中的索引位置

数组元素(此代码例子中为数字数组)要按数值进行从小到大排列,求得某个数字放入排列好的数组中后的索引位置(该数字遵循大小顺序放入数组中,该数字与数组中元素值一致则放在相同大小的元素前方)。如3放在数组[1,3,5,2,4,6]中的索引值是2。题目见where do I belong


function where(arr,num){
  arr.push(num);
  arr.sort(function(a,b){
    return a-b;   //排序
  })
  return arr.indexOf(num);
}

ROT13解密

ROT13-维基百科

为了使代码不那么冗长,直接用了查得的字母char code数值。


function rot13(str) { // LBH QVQ VG!
    var arr=str.split("");
//A-N,O-Z;   a-m: +13  |  n-z: -13
//charA="A".charCodeAt();//A编码65
//charZ="Z".charCodeAt();//Z编码90
// middle=(charA+charZ)/2;//(90+65)/2=77.5 
    for(var i=0;i<arr.length;i++){
        var index=str.charCodeAt(i);
        if(index<=77.5 && index>=65){
            arr[i]=String.fromCharCode(index+13);
            }
        if(index>77.5 && index<=90){
            arr[i]=String.fromCharCode(index-13);
        }
    }
    return arr.join("");
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值