美文网首页
【W3Cschool】初级脚本算法学习笔记

【W3Cschool】初级脚本算法学习笔记

作者: sodaxyh | 来源:发表于2019-01-29 22:45 被阅读0次

    1. 翻转字符串算法挑战

    思路:
    str字符串存入数组,利用数组的reverse()方法翻转,再通过数组的join()方法转为字符串。
    代码:

    function reverseString(str) {
       var temp = [];
       for(var i=0;i<str.length;i++){
           temp[i]=str[i];
       }
       temp.reverse();
       str=temp.join('');
       return str;
    }
    

    知识点:

    • reverse() 方法用于颠倒数组中元素的顺序。


      image.png
    • join() 方法用于把数组中的所有元素转换一个字符串。
      元素是通过指定的分隔符进行分隔的。


      image.png

    2. 阶乘算法挑战

    思路:
    循环计算,对0特判。
    代码:

    function factorialize(num) {
        if(num==0){
            return 1;
        }
        var cnt=num;
        for(var i=cnt-1;i>0;i--){
            num*=i;
        }
        return num;
    }
    

    3. 回文算法挑战

    思路:
    首先用字符串的toLocaleLowerCase()方法将所有字符变成小写,再利用正则匹配和replace()方法去除所有标点。处理完成后判断回文。
    代码:

    function palindrome(str) {
        str=str.toLocaleLowerCase();
        str=str.replace(/[ ]/g,"");
        str=str.replace(/[,]/g,"");
        str=str.replace(/[.]/g,"");
        str=str.replace(/[:]/g,"");
        str=str.replace(/[_]/g,"");
        str=str.replace(/[/]/g,"");
        str=str.replace(/[-]/g,"");
        str=str.replace(/[\\]/g,"");
        str=str.replace(/[(]/g,"");
        str=str.replace(/[)]/g,"");
        for(var i=0;i<str.length/2;i++){
            if(str[i]!=str[str.length-i-1]){
                return false;
            }
        }
        return true;
    }
    

    知识点:

    • replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。该方法不会改变原始字符串。


      image.png
    • toLocaleLowerCase() 方法根据本地主机的语言环境把字符串转换为小写。本地是根据浏览器的语言设置来判断的。
      通常,该方法与toLowerCase()方法返回的结果相同,只有几种语言(如土耳其语)具有地方特有的大小写映射。
      注意: toLocaleLowerCase() 方法没有改变原始字符串。
      提示: 使用toLocaleUpperCase()方法根据本地主机的语言将字符串转换为大写。
      image.png

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

    思路:
    利用字符串的split()方法将单词分割存入数组,判断数组元素长度。
    代码:

    function findLongestWord(str) {
        var t=[],max=0;
        t=str.split(' ');
        
        for(var i=0;i<t.length;i++){
            if(t[i].length>max){
                max=t[i].length;
            }
        }
        return max;
    }
    

    知识点:

    • split() 方法用于把一个字符串分割成字符串数组。
      提示: 如果把空字符串 ("") 用作 separator,那么 stringObject 中的每个字符之间都会被分割。
      注意: split() 方法不改变原始字符串。


      image.png

    5. 设置首字母大写算法挑战

    思路:
    字符串全通过toLowerCase()转换成小写,split()分割成数组,对数组每一项循环,用slice()方法选择,拼凑成新的元素。最后join()方法数组转字符串。
    代码:

    function titleCase(str) {
        str=str.toLowerCase();
        str=str.split(" ");
        for(var i=0;i<str.length;i++){
            str[i]=str[i].slice(0,1).toUpperCase()+str[i].slice(1);
        }
        return str.join(' ');
    }
    

    知识点:

    • slice() 方法可从已有的数组中返回选定的元素。
      slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。
      注意: slice() 方法不会改变原始数组。


      image.png

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

    思路:
    对每个数组分别找最大值,将结果push()进结果数组。
    代码:

    function largestOfFour(arr) {
        var max=0,res=[];
        for(var i=0;i<arr.length;i++){
            max=0;
            for(var j=0;j<arr[i].length;j++){
                if(arr[i][j]>max){
                    max=arr[i][j];
                }
            }
            res.push(max);
        }
        return res;
    }
    

    知识点:

    • push() 方法可向数组的末尾添加一个或多个元素,并返回新的长度。
      注意: 新元素将添加在数组的末尾。
      注意: 此方法改变数组的长度。
      提示: 在数组起始位置添加元素使用 unshift() 方法。
      image.png

    7. 确认末尾字符算法挑战

    思路:
    直接for循环判断。
    代码:

    function confirmEnding(str, target) {
        for(var i=0;i<target.length;i++){
            if(target[i]!=str[str.length-target.length+i]){
                return false;
            }
        }
        return true;
    }
    

    8. 重复操作算法挑战

    思路:
    push()添加字符串到结果,join()转字符串。
    对0特判。
    代码:

    function repeat(str, num) {
        var res=[];
        if(num<0){
            return "";
        }
        for(var i=0;i<num;i++){
            res.push(str);
        }
        return res.join('');
    }
    
    

    9. 字符串截取算法挑战

    思路:
    三种情况:1. 指定参数大于3且参数大于字符串长度; 2. 指定参数大于3且参数不大于字符串长度; 3.指定参数不大于3。
    判断情况后用slice()连接字符串。
    代码:

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

    10. 数组分割算法挑战

    思路:
    按指定大小slice(),将结果push()到结果数组。
    代码:

    function chunk(arr, size) {
        var res=[];
        for(var i=0;i<arr.length/size;i++){
            res.push(arr.slice(i*size+0,i*size+size));
        }
        return res;
    }
    

    11. 数组截断算法挑战

    思路:
    直接slice()即可。
    代码:

    function slasher(arr, howMany) {
        if(howMany==0){
            return arr;
        }
        if(howMany>=arr.length){
            arr=[];
            return arr;
        } 
        arr=arr.slice(howMany,arr.length);
        return arr;
    }
    

    12. 数组查询算法挑战

    思路:
    转字符串调用toLowerCase(),重新划分为数组,依次查找每个元素。
    代码:

    function mutation(arr) {
        arr=arr.join(",");
        arr=arr.toLowerCase();
        arr=arr.split(",");
        for(var i=0;i<arr[1].length;i++){
            var a=arr[0].indexOf(arr[1][i]);
            if(a==-1)  return false;
        } 
        return true;
    }
    

    知识点:

    • indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
      如果没有找到匹配的字符串则返回 -1。
      注意: indexOf() 方法区分大小写。
      image.png

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

    思路:
    filter()方法的运用。
    代码:

    function bouncer(arr) {
        arr=arr.filter(function check(t){
            return t&&(t!="");
        });
        return arr;
    }
    

    知识点:

    • filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
      注意: filter() 不会对空数组进行检测。
      注意: filter() 不会改变原始数组。
      image.png

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

    思路:
    filter()与for循环组合运用。
    代码:

    function destroyer(arr) {
        var argArr = arguments;  
        var res=[];
        for(var i=0;i<argArr.length;i++){
            arr=arr.filter(function check(temp){
                return temp!=argArr[i];
            });
        } 
        return arr;
    }
    

    15. 数组排序并插入值算法挑战

    思路:
    sort()排序,找出添加的数应放的位置。
    代码:

    function where(arr, num) {
        arr.sort(function(x,y){
            return x-y;
        });
        if(num<=arr[0]){
            return 0;
        }
        for(var i=0;i<arr.length-1;i++){
            if(arr[i]<=num&&arr[i+1]>=num)
                break;
        }
        return i+1;
    }
    

    知识点:

    • sort() 方法用于对数组的元素进行排序。
      排序顺序可以是字母或数字,并按升序或降序。
      默认排序顺序为按字母升序。
      注意:当数字是按字母顺序排列时"40"将排在"5"前面。
      使用数字排序,你必须通过一个函数作为参数来调用。
      函数指定数字是按照升序还是降序排列。
      注意: 这种方法会改变原始数组!
      image.png

    16. 位移密码算法挑战

    思路:
    charCodeAt()转换成ASCII码,按要求位移,fromCharCode()转换字符,push()进结果数组,转字符串返回。
    代码:

    function rot13(str) { 
        var res=[];
        for(var i=0;i<str.length;i++){
            var num=str.charCodeAt(i);
            if (num >= 65 && num <= 77)
              num = num + 13;
            else if (num > 77 && num < 91)
              num = num - 13;
            res.push(String.fromCharCode(num));
        }
        return res.join("");
    }
    

    知识点:

    • charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。
      字符串中第一个字符的位置为 0, 第二个字符位置为 1,以此类推。


      image.png
    • fromCharCode() 可接受一个指定的 Unicode 值,然后返回一个字符串。
      注意:该方法是 String 的静态方法,字符串中的每个字符都由单独的 Unicode 数字编码指定。使用语法: String.fromCharCode()。


      image.png

    相关文章

      网友评论

          本文标题:【W3Cschool】初级脚本算法学习笔记

          本文链接:https://www.haomeiwen.com/subject/pldxsqtx.html