代码改变世界

前端笔试题及资料集锦(三)

2014-09-19 16:34  大额_skylar  阅读(1622)  评论(3编辑  收藏  举报

先说在前面喔,欢迎大家发现错误,提供更好的方法~共同学习~

(2014阿里巴巴前端笔试题)请补充代码,使mySort()能将传入的参数按从小到大的顺序显示出来。

function mySort(){

   var args = new Array();//使用数组作为参数存储容器

   请补充你的代码

   return args;//返回已经排序的数组

 }

var result = mySort(23,44,56,98,1,2,33);//传入的参数不定

console.log(result);//显示结果

 

 

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4 <meta charset=utf-8>
 5 <title>demo</title>
 6 </head> 
 7 
 8 <style>  
 9 
10 </style>  
11     
12 <body>
13 
14     <script>
15       function mySort(){
16         var args = new Array();
17         var len = arguments.length;
18         for(var i=0;i<len;i++){
19           args.push(arguments[i]);
20         }
//由于sort()方法对数字排序不尽如人意,给他定义个比较函数
21 function compare(num1,num2){ 22 return num1-num2; 23 } 24 args.sort(compare); 25 return args; 26 } 27 var result = mySort(50,11,15,32,46,78,100,22,9,0); 28 console.log(result); 29 30 </script> 31 </body> 32 </html>

 

 

 

哈哈,最近看秒味视频觉得不错,也顺势做了些讲的题,我还是努力踏踏实实的写写代码,学好基础知识。

嘿嘿,下面来笔面试题第三弹。(字符串part)

一、字符串转驼峰写法,例:'border-bottom-color' --> borderBottomColor 

      常规做法:以‘-’分割,从第二个单词起首字母大写,join成串。

      

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4 <meta charset=utf-8>
 5 <title>字符串转驼峰</title>
 6 </head>  
 7 <style>  
 8    
 9 </style>  
10     
11 <body>
12     <script>
13         var str = 'border-bottom-color';
14          /*这里是常规方法*/
15         function transform(str){
16           var arr = str.split('-');//[border,bottom,color]
17           for(var i=1;i<arr.length;i++){
18              arr[i] = arr[i].charAt(0).toUpperCase() + arr[i].substring(1); //[border,Bottom,Collor]
19           }
20           return arr.join('');
21         }
22         console.log(transform(str));
23     </script>
24 </body>  
25 </html>

 

   正则写法:正则匹配

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4 <meta charset=utf-8>
 5 <title>字符串转驼峰</title>
 6 </head>  
 7 <style>  
 8    
 9 </style>  
10     
11 <body>
12     <script>
13         var str = 'border-bottom-color';
14         /*这里是正则方法*/
15         function transform(str){
16           //()代表正则中的第一个子项
17            var re = /-(\w)/g;
18           // $0代表正则的整体$1代表正则中的第一个子项
19            return str.replace(re,function($0,$1){
20                 return $1.toUpperCase();
21            });
22         }
23         console.log(transform(str));
24     </script>
25 </body>  
26 </html>

 

二、字符串中出现最多的字符和个数

     常规写法:利用对象字面量

 

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4 <meta charset=utf-8>
 5 <title>字符串中出现最多的字符和个数</title>
 6 </head>  
 7 <style>  
 8    
 9 </style>  
10     
11 <body>
12     <script>
13         var str = 'aaaaaakkkkkkaaaaasddd';
14         function most(str){
15             //不同的字符在obj中都有个数组
16            /* obj  = {
17               a:[],
18               d:[]
19             }*/
20             var obj = {};
21             var num = 0;
22             var value = '';
23             for(var i=0;i<str.length;i++){
24                 //如果obj{}中这个字符对应的数组还没存在的话,那么给他创建个空数组
25                 if(!obj[str[i]]){
26                   obj[str[i]] = [];
27                 }
28                 //把这个字母push进它对应的数组中
29                 obj[str[i]].push(str[i]);
30             }
31             for(attr in obj){
32               if(num<obj[attr].length){
33                 num = obj[attr].length;
34                 //obj[attr]数组中的每个字符都是相同的
35                 value = obj[attr][0];
36               }
37             }
38             return '出现次数最多的字符是'+value+'出现了'+num+'';
39         }
40         console.log(most(str));
41     </script>
42 </body>  
43 </html>

 

正则写法:

 

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4 <meta charset=utf-8>
 5 <title>字符串中出现最多的字符和个数</title>
 6 </head>  
 7 <style>  
 8    
 9 </style>  
10     
11 <body>
12     <script>
13         var str = 'kkkkkkkaaakkkkkkaaaaasddd';
14         function most(str){
15              //排序,正则匹配子项
16              var arr = str.split('');
17              arr.sort();
18              str = arr.join('');
19             // \1匹配前面相同的,也就是说跟(\w)相同的
20              var re = /(\w)\1+/g;
21              var num = 0;
22              var value = '';
23              //这里的$0就是找到的重复的整体
24              str.replace(re,function($0,$1){
25                  //alert($0);
26                  if(num<$0.length){
27                   num = $0.length;
28                   value = $1;
29                  }
30              });
31              return '出现次数最多的字符是'+value+'出现了'+num+'';
32         }
33 
34         console.log(most(str));
35     </script>
36 </body>  
37 </html>

 

三、给字符串加千分符

 

常规解法:里面包含了几个小技巧,还挺巧妙的。先把三位多余的部分从前面拿出来,把后面整3部分逗号分隔,最后把多余的加到前面。

 1 var str = '12345432';//->[]
 2          function spli(str){
 3             var iNum = str.length%3;//->0,1,2
 4             var prev = '';
 5             var arr = [];
 6             var iNow = 0;
 7             var tmp = '';
 8             //千分号是从后向前三位三位加的,所以把三位余出来的从前面提取到
 9             if(iNum !=0){
10                 prev = str.substring(0,iNum);
11                 arr.push(prev);
12             }
13             //取到多余部分后面的
14             str = str.substring(iNum);
15             for(var i=0;i<str.length;i++){
16                 iNow++;
17                 tmp += str[i];
18                 if(iNow==3 && tmp){
19                     //数组里面放的是三位的数
20                     arr.push(tmp);
21                     tmp = '';
22                     iNow = 0;
23                 }
24             }
25             return arr.join(',');
26          }
27          console.log(spli(str));

 

正则写法:这个的正则写法比较有难度,要先搞清楚什么事前向声明和反前向声明;

 1    /*(?=) :前向声明
 2          (?!) :反前向声明
 3          var str = 'a(?=)bacad';
 4          var re =  //g;
 5          str = str.replace(re,'*');
 6          alert(str);
 7          */
 8          var str = '112345432';
 9          function spli(str){
10              var re = /(?=(?!\b)(\d{3})+$)/g;
11              return str.replace(re,',');
12          }
13          console.log(spli(str));

 

四、返回只包含数字类型的数组,例:'abc234koi45jodjnvi789' --> [234,45,789]

 

还没有找到除正则外的其他比较好的方法,大家有好方法尽情指出哈。

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3 <head>
 4 <meta charset=utf-8>
 5 <title>返回只包含数字类型的数组</title>
 6 </head>  
 7 <style>  
 8    
 9 </style>  
10     
11 <body>
12     <script>
13         var str = 'abc234koi45jodjnvi789';//得到[234,45,789]
14         var re = /(\d+)/g;
15         var arr = [];
16         str.replace(re,function($0,$1){
17             return arr.push(parseInt($1));
18         });
19         console.log(arr);
20         /*var str = 'abc234koi45jodjnvi789';
21         console.log(str.split(/[a-z]+/g));*/
22     </script>
23 </body>  
24 </html>