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 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);
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");
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");
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");
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]]);
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");
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);
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);
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);
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);
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"]);
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]);
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);
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);
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");