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-位移密码

猜你喜欢

转载自www.cnblogs.com/edward-life/p/10767553.html