• W3CSchool闯关笔记(初级脚本算法)


    W3C后台校验代码bug很多,有的时候跑不过不一定是自己代码写得有问题,也许是网页后台的bug,可以自己把代码放到本地的html文件中跑一下看看

     1 function reverseString(str) {
     2        
     3      /*
     4      *******学过java的朋友特别注意******
     5      ***JS中数组处理方法默认行为与java中的数组处理方法默认行为有差异,跑不出来的话请学习W3C官方教程中JS的对应内容了解详情
     6      */
     7      //  var arr = str.split();
     8      //这是把整个hello字符串作为数组的一个元素转化成数组,即便翻转数组元素只会翻转多个元素之间的位置,不会翻转元素内容
     9      //例如["hello"],使用reverse之后结果仍然是["hello"]
    10      //正确的思路应该是:吧字符串---逐个字母---存进数组,然后翻转数组输出
    11      
    12      var arr = str.split("");   //括号内加引号是逐个字符存进数组
    13      
    14      var temp = arr.reverse();  //Java中reverse方法可以直接翻转字符串,JS中不行,必须先转化成数组
    15      
    16      str = temp.join('');   //括号内加引号是规定数组元素之间以空字符连接,即元素之间直接连接
    17      //若括号内什么都不加,则默认数组元素之间是以逗号连接
    18     return str;
    19 }
    20 
    21 reverseString("hello");
    1-字符串翻转
    1 function factorialize(num) {
    2     var result = 1; //这里引入了新变量result用于存放结果,对于初学者推荐使用这种方式,逻辑较为清晰
    3     for (var i = num; i >= 1; i--) {
    4         result *= i;
    5     }
    6     return result;  //注意return出来的值
    7 }
    8 
    9 factorialize(5);
    2-阶乘
     1 function palindrome(str) {
     2 
     3     for( var i = 0; i < 50; i++){
     4         //将所有字符串中多余的标点符号和空格删除
     5         str = str.replace( /[^a-zA-Z0-1]/i ,"" );
     6     }
     7     str = str.toLowerCase();            //将清除过后的字符串中的大写字母全部换成小写
     8     var arr = str.split("");             //将得到的小写化的字符串逐个字符转为数组
     9     var reArr = arr.reverse();           //将数组元素位置翻转
    10     
    11     
    12     arr = str.split("");    //把数组arr的值恢复到翻转前的状态
    13     str = arr.join("");     //把数组arr拼接成字符串,这里注意,将数组arr拼接形成的字符串和str不同
    14     
    15     
    16     var reStr = reArr.join("");          //将翻转的数组拼接成字符串
    17     return str === reStr;
    18 
    19 }
    20 
    21 palindrome("A man, a plan, a canal. Panama");
    3-回文算法
     1 function findLongestWord(str) {
     2     var arr = str.split(" ");   
     3     //引号中间不加空格时将逐个字符的转化成数组
     4     //引号中间加上空格,将以空格为划分界限,将相邻空格之间的所有字符作为一个数组元素
     5     //可以自己返回arr测试,进行比较
     6     var len = 0;
     7     for (var i = 0; i <= arr.length - 1 ; i++) {
     8         if (len < arr[i].length) {  //数组中单词长度比较
     9             len = arr[i].length;    //遇到更长的就把长度赋值给len
    10         }
    11     }
    12     
    13 return len;
    14 }
    15 
    16 findLongestWord("The quick brown fox jumped over the lazy dog");
    4-寻找最长单词
     1 function titleCase(str) {
     2     var arr = str.toLowerCase().split(" ");     
     3     //把输入的字符串全部转为小写字母,再转化成数组,注意:::::会把字符串外面的引号消去
     4     for(var i =0; i < arr.length ; i++){
     5         //每个单词首字母取出转为大写后与剩余字母拼接
     6         arr[i] = arr[i].substring(0,1).toUpperCase() + arr[i].substring(1);
     7     }
     8     str = arr.join(" ");    //把转换完成的数组拼接成字符串
     9     
    10 /*    str = """ + str + """;  因为系统bug加上这句编译反而出错,实际上加上这句输出才与题目要求一致         */
    11 
    12     return  str ;      //经过一系列的转换,字符串中的引号被消除了,最后要把引号加回来.
    13 }
    14 
    15 titleCase("sHoRt AnD sToUt");
    5-首字母大写
     1 function largestOfFour(arr) {
     2 // You can do this!
     3     var newArr = [];
     4     var max = 0;
     5     for (var i = 0; i < arr.length; i++) {
     6         for (var j = 0; j < arr[i].length ; j++) {
     7             //小数组中找最大值赋值给max
     8             if( arr[i][j] > max){
     9                 max = arr[i][j];
    10             }
    11         }
    12         newArr.push(max);
    13         max = 0;    //每个小数组中的最大值插入新数组后要将max清零,否则会印象后续小数组最大值的寻找
    14     }
    15     return newArr;
    16 }
    17 
    18 largestOfFour([[13, 27, 18, 26], [13, 27, 18, 26], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
    6-数组中的最大值
     1 function confirmEnding(str, target) {
     2 // "Never give up and good luck will find you."
     3 // -- Falcor
     4 /*  
     5     这种方法只适用于单字符,当目标是字符串时不适用
     6     var n = str.lastIndexOf(target);
     7     if ( n == str.length-1) {
     8         return true;
     9     } else {
    10         return false;
    11     }*/
    12 /*    return n;*/
    13 
    14 //思路,从字符串末尾处截取与匹配字符串相同长度的字符串,进行匹配
    15 return str.substr(str.length - target.length , target.length) == target;
    16 
    17 }
    18 
    19 confirmEnding("Bastia3", "3");
    7-确认末尾字符串
     1 function repeat(str, num) {
     2 // repeat after me
     3 /* 
     4 ******第一种,能跑过,返回值没有引号*****
     5     if (num <= 0) {
     6         return "";
     7     } else {
     8         return  str.repeat(num);
     9     }*/
    10     
    11     
    12 /*******第二种,能跑过,返回值没有引号
    13     if(num<=0){
    14         return "";
    15     }else{
    16         var string="";
    17         for (var i = 0; i <num; i++) {
    18             string=string+str;
    19         }
    20     }
    21     return string;*/
    22     
    23 /***下面为第三种,本人自己写的,网页跑不过,本地html文件中测试能满足题目所有要求,返回值有引号*****/
    24     if (num <= 0) {
    25         return outStr;
    26     } else {
    27         for (var i = 0; i < num; i++) {
    28             outStr += str;
    29         }
    30         return """ + outStr + """;
    31     }
    32 
    33 }
    34 
    35 var outStr = "";
    36 /*repeat("*", 3);
    37 repeat("abc", 3);
    38 repeat("abc", 4);
    39 repeat("abc", 1);
    40 repeat("*", 8);*/
    41 repeat("abc", 5);
    8-重复操作算法
     1 function truncate(str, num) {
     2 // Clear out that junk in your trunk
     3     if (num <= 3) {
     4         return str.slice(0,num) + "...";    
     5     //注意:slice方法两个参数中,前一个参数是起始截取位置,后一个参数是截取的长度,不是截取的终止位置
     6     } else if( num < str.length){
     7         return str.slice(0,num-3) + "...";
     8     }
     9     else {
    10         return str;
    11     }
    12 }
    13 
    14 truncate("A-", 1);
    9-字符串截取
     1 function chunk(arr, size) {
     2 // Break it up.
     3     var newArr = [];
     4     for (var i = 0; i < arr.length ; i += size) {
     5         newArr.push(arr.slice(i,i+size));
     6     }
     7     return newArr;
     8 }
     9 
    10 chunk(["a", "b", "c", "d"], 3);
    10-数组分割
    1 function slasher(arr, howMany) {
    2 // it doesn't always pay to be first
    3 
    4 return arr.slice(howMany);//slice只有一个参数n时表示将数组前面的n个元素剔除
    5 }
    6 
    7 slasher([1, 2, 3,4,5,6,7,5,9], 2);
    11-数组截断
     1 function mutation(arr) {
     2     var str1 = arr[0].toLowerCase();
     3     var str2 = arr[1].toLowerCase();
     4     var newArr = str2.split("");
     5     //使用到很多方法的时候注意每个方法的细节,一点不同可能效果完全不一样,可以逐一检查是哪一步与预想不同
     6     for (var i = 0; i < newArr.length; i++) {
     7         if(  str1.indexOf(newArr[i]) < 0){
     8             return false;
     9         }
    10     }
    11     // var index = str1.indexOf(newArr[2]);
    12     return true;
    13     //本题还可以不适用indexOf方法解决,将两个字符串分别逐个字符存进两个数组,将第二个数组的所有元素在数组一中遍历
    14 }
    15 mutation(["hello", "neo"]);
    12-数组查询
     1 function bouncer(arr) {
     2 // Don't show a false ID to this bouncer.
     3 /*filter方法的作用是将不符合括号内条件的元素删除*/
     4     return arr.filter(function(val){
     5         // 内层函数的作用是检测数组中每个元素是否为假值,即将值为false或者不为字符串或空字符串删除
     6         return !(!val || val === "");
     7     });
     8 }
     9 
    10 bouncer([7, "ate", "", false, 9]);
    13-删除数组中特定值
     1 function destroyer(arr) {
     2 // Remove all the values
     3 var newArr = arguments; //获取所有参数
     4 for (var i = 0; i <= newArr.length ; i++) {
     5     arr = arr.filter(function(val){
     6         // 内层函数执行结果为真则删除其余元素,这里逻辑有点绕,得一层层理清楚
     7        return newArr[i] !== val; 
     8     });
     9 }
    10 return arr;
    11 }
    12 
    13 destroyer([1, 2, 3, 1, 2, 3], 2, 3);
    14-去除数组任意多个值
     1 function where(arr, num) {
     2 // Find my place in this sorted array.
     3     function sortNumber(a,b){   //规定排序按数字大小排序
     4         return a - b
     5     }
     6     arr.push(num);  //将num插入数组
     7     arr.sort(sortNumber);   //将数组排序
     8     for (var i = 0; i <= arr.length ; i++) {
     9         //查找num并返回索引值
    10         if(arr[i] == num){
    11             return i;
    12         }
    13     }
    14 }
    15 
    16 where([40, 70,90,150,30,60], 50);
    15-数组排序并插入值
     1 function rot13(str) { // LBH QVQ VG!
     2     
     3     var start = "A".charCodeAt(0);
     4     var   end = "Z".charCodeAt(0);
     5     var objstr = "";
     6     
     7     var strs = str.split(" ");
     8     for(var i=0 ; i<strs.length ; i++){
     9         for(var j=0 ; j<strs[i].length ; j++){
    10           
    11             if (strs[i].charCodeAt(j) >= start && strs[i].charCodeAt(j) <= end) {
    12                 if (strs[i].charCodeAt(j)-13 >= start && strs[i].charCodeAt(j)-13 <= end) {
    13                     objstr += String.fromCharCode(strs[i].charCodeAt(j)-13);
    14                 }else{
    15                     objstr += String.fromCharCode(strs[i].charCodeAt(j)+13);
    16                 }
    17             } else {
    18                 objstr += strs[i][j];
    19             }
    20         }
    21         objstr += " ";
    22     }
    23     return  objstr.substr(0 , objstr.length-1);
    24 }
    25 
    26 // Change the inputs below to test
    27 rot13("SERR PBQR PNZC");
    16-位移密码
  • 相关阅读:
    Android实战技巧之三十八:Handler使用中可能引发的内存泄漏
    android上FragmentTabHost实现自己定义Tab Indicator
    GSO/TSO/GRO等对VirtIO虚机的网络性能影响分析(by quqi99)
    经典开源作品
    @在php中的作用
    .net开发中常用的第三方组件
    如何正确并完全安装Visual Studio 2015企业版本?
    TinyPNG---一个压缩PNG的神站
    asp.net MD5 加密
    PHP判断访问者手机移动端还是PC端的函数,亲测好用
  • 原文地址:https://www.cnblogs.com/edward-life/p/10767553.html
Copyright © 2020-2023  润新知