JavaScript初级算法总结

1.实战翻转字符串算法

要求:先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,然后把数组转化成字符串。

function reverseString(str) {
    var array = str.split(""); //将字符串转为数组类型
    console.log(array);
    var t = array.reverse(); //将数组翻转
    str = t.join('');//将数组转为字符串
return str;
}

2.计算 所提供整数的阶乘。

要求:如果使用字母n代表一个整数,则阶乘是所有小于或等于n的整数的乘积。

function factorialize(num) {  //利用遍历
    var sum = 1;
    if (num < 0) {
        return null;}
        else if (num >0){
            for (var i = 1; i <= num; i++) {
                sum = sum * i;
            }
        } else{
            sum = 1;
        }
    return sum;    
    }

3.回文算法

要求:palindrome(回文)是指一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样

function palindrome(str) {
    str = str.replace(",","");//去掉逗号
    str = str.replace(".","");//去掉“.”
    str = str.replace(/\s*/g,"");//去掉字符串所有的空格
    var t = str.toLowerCase();//变为小写,排除大小写不同
   if (str.toLowerCase() == t.split('').reverse().join('')) {
       return true; //如果是回文则返回true
   }else{
       return false;//否则返回false
   }
// Good luck!
}

4.寻找最长的单词的算法

要求:返回提供的句子中最长的单词的长度。返回应该是一个数字

function findLongestWord(str) {  
    var array = str.split(" "); //将字符串转为数组
    //console.log(array);
    console.log(array[0].length);//求得数组的长度
    var t = array[0].length;//利用遍历得到数组中每个元素的长度
    for (var i = 0; i < array.length; i++) {
        if (t <= array[i].length) {
            t = array[i].length;
            str = array[i];
        }
    }
return str.length;//最后返回长度最长的元素
}

5.设置首字母大写的算法

要求:返回一个字符串,确保字符串的每个单词首字母都大写,其余部分小写。

function titleCase(str) {
    str = str.toLowerCase();//先将字符串都变小
    var array = str.split(" ");//转为数组
    for (var i = 0; i < array.length; i++) {//遍历,将首字母变为大写,利用“+”将大小写字母接在一起
        array[i] = array[i].substring(0,1).toUpperCase()+array[i].substring(1);
    }
    str = array.join(" ");//数组变回字符串
    
return str;
}

6.寻找数组中的最大值算法

要求:请分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新的数组。

function largestOfFour(arr) {
    for (var i = 0; i < arr.length; i++) {
        var t = arr[i][0];
        for (var j = 0; j < arr[i].length; j++) {
            if(t < arr[i][j]) {
                t = arr[i][j];
            }
            
        }
        arr[i]=t;
        
    }
return arr;
}

7.确认末尾字符算法

要求:检查一个字符串(str)是否以指定的字符串(target)结尾。

function confirmEnding(str, target) {
if (str.endsWith(target)) {
    return true;
}else{
    return false;
}
}

8.重复操作算法

要求:循环拼接一个指定的字符串 num次,如果num是一个负数,则返回一个空字符串。

function repeat(str, num) {
var t = str;
if (num < 0) {
    return "";
}else{
    for (var i = 1; i < num; i++) {
    t = t + str;
}
str = t;
}
return str;
}

9.字符串截取算法

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

切记,插入到字符串尾部的三个点号也会计入字符串的长度。然而,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。

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

return str;
}

10.数组分割算法

要求:编写一个函数,把一个数组arr按照指定的数组大小size分割成若干个数组块。

function chunk(arr, size) {
var t = [];
var arr2 = arr;
    for (var i = 0; i < arr.length; i += size) {
        t.push(arr.slice(i, i + size));
        
    }
   arr = t; 

return arr;
}

11.数组截断算法

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

function slasher(arr, howMany) {
arr.splice(0,howMany);
console.log(arr);
return arr;
}

12数组查询算法

要求:如果数组第一个字符串元素包含了第二个字符串元素的所有字符,则函数返回true。

function mutation(arr) {
    for (var i = 0; i < arr[1].length; i++) {
        var t = arr[1].toLowerCase().slice(i,i+1);
        if (arr[0].toLowerCase().indexOf(t) != -1) {  //indexOf用于从头到尾检测字符串是否含有字串,它对大小写敏感,所以先转为小写在判断
        return true;
        
    }else{
        return false;
    }

    }
}

13.删除数组中特定值的算法

要求:删除数组中的所有的假值。例false,NaN,undefined,null,“”,0

function bouncer(arr) {
var t = [];
for (var i = 0; i < arr.length; i++) {
    if (Boolean(arr[i])) {
       t.push(arr[i]);
    }
}
arr = t;
return arr;
}

14.去除数组中任意多个值的算法

要求:实现一个 destroyer 函数,第一个参数是初始数组,后跟一个或多个参数。从初始数组中删除与这些参数具有相同值的所有元素。

function destroyer(arr) {
    //arguments是保存当前函数所有的参数的类数组对象
    var argArr = arguments;  
    //遍历参数数组,与初始数组的每个元素进行比较,返回初始数组中不同的元素
    for(var i = 1; i < argArr.length; i++){  
        arr = arr.filter(function(val){  
            return argArr[i] !== val;     
        });  
    }  
    return arr;

}

15数组排序并插入值算法

要求:先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。

function where(arr, num) {
// Find my place in this sorted array.
arr.sort(function(a,b){
   return a - b;
 });
 for (var i = 0; i < arr.length; i++) {
     if (arr[i] == num | arr[i] > num) {
         return i;
     }
 }
num = i;
return num;
}

where([40, 60], 50);

16位移密码算法

要求:移位密码也就是密码中的字母会按照指定的数量来做移位。

function rot13(str) { // LBH QVQ VG!
  var arr = str.toUpperCase().split(" ");
  var str1 = [];
  for (var i = 0; i < arr.length; i++) {
    var arr1 = arr[i].split("");
    for (var j = 0; j < arr1.length; j++) {
      var num = arr1[j].charCodeAt();
      if (num >= 65 && num <= 90) {
        arr1[j] = num + 13 > 90 ? String.fromCharCode(64 + (num + 13 - 90)):String.fromCharCode(num + 13); //64 + (num + 13 - 90) 要明白为什么是64 ,
      }
 
    }
    str1.push(arr1.join(""));
  }
  return str1.join(" ");
}
 
// Change the inputs below to test
rot13("SERR PBQR PNZC");














  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值