JS基础算法题(一)

记录在FreeCodeCamp中遇到的Javascript基础算法题

1.翻转字符串

先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串

  1. function reverseString(str)
  2. var arr = str.split(""); 
  3. var reverseArr = arr.reverse(); 
  4. str = reverseArr.join(''); 
  5. return str; 
  6.  
  7. reverseString("hello"); //olleh 

用到的方法:String.split();Array.join();Array.reverse()

2.计算整数的阶乘

如果用字母n来代表一个整数,阶乘代表着所有小于或等于n的整数的乘积。

  1. function factorialize(num)
  2. var result =1
  3. for(var i=1;i<=num;i++){ 
  4. result*=i; 
  5. return result; 
  6.  
  7. factorialize(5);//5*4*3*2*1=120 
3.回文字符串

如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。

  1. function palindrome(str)
  2. str = str.replace(/[^\w]/gi, "").replace(/_/g, "");  
  3. str = str.toLowerCase(); 
  4. var reverseStr = str.split("").reverse().join(''); 
  5. if (str == reverseStr) { 
  6. return true
  7. } else
  8. return false
  9.  
  10. palindrome("eye"); 

涉及知识点:String.replace();String.toLowerCase();正则表达式

4.找出最长的单词

在句子中找出最长的单词,并返回它的长度。

  1. function findLongestWord(str)
  2. str = str.split(" "); 
  3. //这里我用了一个比较麻烦的方法,冒泡排序;简便方法可以看第6题 
  4. for (var i = 0; i < str.length; i++) { 
  5. for (var j = 0; j < str.length - 1 - i; j++) { 
  6. if (str[j + 1].length > str[j].length) { 
  7. var temp = str[j]; 
  8. str[j] = str[j + 1]; 
  9. str[j + 1] = temp; 
  10. return str[0].length; 
  11.  
  12. findLongestWord("The quick brown fox jumped over the lazy dog"); 

涉及知识:String.split();String.length;排序算法

5.字符串首字母大写

句中单词首字母大写。确保字符串的每个单词首字母都大写,其余部分小写。像'the'和'of'这样的连接符同理。

  1. function titleCase(str)
  2. var strArr = str.toLowerCase().split(" "); 
  3. for(var i=0;i<strArr.length;i++){ 
  4. var first = strArr[i].charAt(0);//返回指定位置的字符,标点符号也包括在内 
  5. strArr[i] = strArr[i].replace(first,function(first)
  6. return first.toUpperCase(); 
  7. }); 
  8. str = strArr.join(" "); 
  9. return str; 
  10.  
  11. titleCase("I'm a little tea pot"); 

涉及知识:String.charAt();String.split();String.toUpperCase()

6.找出多个数组中的最大数
  1. function largestOfFour(arr)
  2. var largestArr = []; 
  3. for(var i=0;i<arr.length;i++){ 
  4. var largest = 0
  5. for(var j=0;j<arr[i].length;j++){ 
  6. largest = arr[i][j]>largest?arr[i][j]:largest; 
  7. largestArr.push(largest); 
  8. return largestArr; 
  9.  
  10. largestOfFour([[4, 5, 1, 3], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]); //[5,27,39,1001] 

涉及知识:三元运算符;比较操作符

7.检查字符串结尾

判断一个字符串(str)是否以指定的字符串(target)结尾。

  1. function confirmEnding(str, target)
  2. //substr()在字符串中抽取从 start 下标开始的指定数目的字符 
  3. if(target == str.substr(str.length - target.length, target.length)){ 
  4. return true
  5. }else
  6. return false
  7.  
  8. confirmEnding("Bastian", "n");//true 
  9. confirmEnding("He has to give me a new name", "me");//true 

涉及知识:String.substr();

8.重复输出字符串

重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。

  1. function repeat(str, num)
  2. var res = ""
  3. for(var i=0; i<num; i++){ 
  4. res += str; 
  5. return res; 
  6.  
  7. repeat("abc", 3); 
9.截断字符

如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。

切记,插入到字符串尾部的三个点号也会计入字符串的长度。

但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。

  1. function truncate(str, num)
  2. var extra=""
  3. if(str.length>num){ 
  4. if(num>3){ 
  5. extra = str.slice(0,num-3)+"..."
  6. }else
  7. extra = str.slice(0,num)+"..."
  8. return extra; 
  9. return str; 
  10.  
  11. truncate("A-tisket a-tasket A green and yellow basket", 11);//A-tisket... 

涉及知识:String.slice()

10.截断数组

返回一个数组被截断n个元素后还剩余的元素,截断从索引0开始

  1. function slasher(arr, howMany)
  2. arr.splice(0,howMany); 
  3. return arr; 
  4.  
  5. slasher([1, 2, 3], 2); 

涉及知识:Array.splice()

posted @ 2019-05-24 15:04  MandyCheng  阅读(360)  评论(0编辑  收藏  举报