freecodecamp 初级算法地址戳这里
Reverse a String
翻转字符串
1 function reverseString(str) { 2 str=str.split("").reverse().join(""); 3 return str; 4 } 5 6 reverseString("hello")
Factorialize a Number
计算一个整数的阶乘
1 function factorialize(num) { 2 if(num>1){ 3 num=num*factorialize(num-1); 4 }else{ 5 num=1; 6 } 7 return num; 8 } 9 10 factorialize(5);
Check for Palindromes
如果给定的字符串是回文,返回true
,反之,返回false
。
1 function palindrome(str) { 2 // Good luck! 3 var str1=str.toLowerCase().replace( /[()s.,/_-]/g,"" ); 4 var str2=str1.split("").reverse().join(""); 5 return str1==str2; 6 } 7 8 palindrome("eye");
Find the Longest Word in a String
找到提供的句子中最长的单词,并计算它的长度。
1 function findLongestWord(str) { 2 var arr=str.split(" "); 3 var max=0; 4 for(let a of arr){ 5 max=a.length>max?a.length:max; 6 } 7 return max; 8 } 9 10 findLongestWord("The quick brown fox jumped over the lazy dog");
Title Case a Sentence
确保字符串的每个单词首字母都大写,其余部分小写。
1 function titleCase(str) { 2 var arr=str.split(" "); 3 for(var i in arr){ 4 var len=arr[i].length; 5 var word=arr[i].toLowerCase(); 6 7 if( len==1 ){ 8 arr[i]=word.toUpperCase(); 9 }else{ 10 arr[i]=word.substring(0,1).toUpperCase()+word.substring(1,len); 11 } 12 13 } 14 str=arr.join(" "); 15 return str; 16 } 17 18 titleCase("I'm a little tea pot");
Return Largest Numbers in Arrays
右边大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
1 function largestOfFour(arr) { 2 // You can do this! 3 var max=[]; 4 5 for(var i in arr){ 6 let bigger; 7 for(var j in arr[i]){ 8 bigger=bigger?( arr[i][j]>bigger?arr[i][j]:bigger ):arr[i][j]; 9 } 10 max.push(bigger); 11 } 12 return max; 13 } 14 15 largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
Confirm the Ending
检查一个字符串(str
)是否以指定的字符串(target
)结尾
1 function confirmEnding(str, target) { 2 // "Never give up and good luck will find you." 3 // -- Falcor 4 var str1=str.replace( new RegExp(target,"g"),"|"); 5 var flag=str1.lastIndexOf("|"); 6 return flag==str1.length-1?true:false; 7 } 8 9 confirmEnding("Bastian", "n");
Repeat a string repeat a string
重复一个指定的字符串 num
次,如果num
是一个负数则返回一个空字符串。
1 function repeat(str, num) { 2 // repeat after me 3 var str1=str; 4 if( num<=0 ){ 5 str1=""; 6 } 7 8 while( num>1 ){ 9 str1+=str; 10 num--; 11 } 12 return str1; 13 } 14 15 repeat("abc", 3);
Truncate a string
如果字符串的长度比指定的参数num
长,则把多余的部分用...
来表示。
1 function truncate(str, num) { 2 // Clear out that junk in your trunk 3 var index; 4 if( str.length>num ){ 5 if ( num<=3 ){ 6 index=num; 7 }else{ 8 index=num-3; //-3是减去...的长度 9 } 10 str=str.slice(0,index)+"..."; 11 } 12 13 return str; 14 } 15 16 truncate("A-tisket a-tasket A green and yellow basket", 11);
Chunky Monkey
把一个数组arr
按照指定的数组大小size
分割成若干个数组块。
1 function chunk(arr, size) { 2 // Break it up. 3 var arr2=[]; 4 var max=Math.ceil( arr.length/size ); 5 6 for(var i=0;i<max;i++){ 7 arr2.push( arr.slice(i*size,i*size+size) ); 8 } 9 return arr2; 10 } 11 12 chunk(["a", "b", "c", "d"], 2);
Slasher Flick
返回一个数组被截断n
个元素后还剩余的元素,截断从索引0开始。
1 function slasher(arr, howMany) { 2 // it doesn't always pay to be first 3 arr.splice(0,howMany); 4 return arr; 5 } 6 7 slasher([1, 2, 3], 2);
Mutations
如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
1 function mutation(arr) { 2 var main=arr[0].toLowerCase(); 3 var search=arr[1].toLowerCase().split(""); 4 for(var a in search){ 5 if( main.indexOf( search[a] )==-1 ){ 6 return false; 7 } 8 9 } 10 return true; 11 } 12 13 mutation(["hello", "hey"]);
Falsy Bouncer
删除数组中的所有假值。
1 function bouncer(arr) { 2 // Don't show a false ID to this bouncer. 3 return arr.filter(isTrue); 4 } 5 6 function isTrue(ele){ 7 if( ele ){ 8 return ele; 9 } 10 11 } 12 13 bouncer([7, "ate", "", false, 9]);
Seek and Destroy
实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
1 function destroyer() { 2 // Remove all the values 3 var arr=[].shift.apply( arguments ); 4 var vals=arguments; 5 6 var arr2=arr.filter(function(ele){ 7 for(var i=0,l=vals.length;i<l;i++){ 8 if( ele==vals[i] ){ 9 return false; 10 } 11 } 12 return true; 13 }); 14 console.log(arr2); 15 return arr2; 16 } 17 18 19 20 destroyer([1, 2, 3, 1, 2, 3], 2, 3);
Where do I belong
先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
1 function where(arr, num) { 2 // Find my place in this sorted array. 3 arr.push(num); 4 var index=arr.sort(function(a,b){ 5 return a-b; 6 }).indexOf(num); 7 return index; 8 } 9 10 where([40, 60], 50);
Caesars Cipher
下面我们来介绍风靡全球的凯撒密码Caesar cipher
,又叫移位密码。
写一个ROT13函数,实现输入加密字符串,输出解密字符串。
1 function rot13(str) { // LBH QVQ VG! 2 var arr=str.split(" "); 3 var result=[]; 4 for(var i in arr){ 5 result.push( word(arr[i],13) ); 6 } 7 return result.join(" "); 8 } 9 10 function word(str,num){ 11 var res=""; 12 for(var i=0,l=str.length;i<l;i++){ 13 res+=String.fromCharCode( char(str.charCodeAt(i),num) ); 14 } 15 return res; 16 } 17 function char(old,add){ 18 //65-90 A-Z 19 //97-122 a-z 20 var res; 21 var cha; 22 if( old>=65 && old<=90 ){ 23 cha=old+add-90; 24 res=cha<=0?old+add:65+cha-1; 25 }else if( old>=97 && old<=122 ){ 26 cha=old+add-122; 27 res=cha<=0?old+add:97+cha-1; 28 }else{ 29 res=old; 30 } 31 32 return res; 33 34 } 35 36 37 38 // Change the inputs below to test 39 rot13("SERR PBQR PNZC");