先說在前面喔,歡迎你們發現錯誤,提供更好的方法~共同窗習~html
(2014阿里巴巴前端筆試題)請補充代碼,使mySort()能將傳入的參數按從小到大的順序顯示出來。前端
function mySort(){面試
var args = new Array();//使用數組做爲參數存儲容器數組
請補充你的代碼函數
return args;//返回已經排序的數組學習
}spa
var result = mySort(23,44,56,98,1,2,33);//傳入的參數不定code
console.log(result);//顯示結果orm
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)
1、字符串轉駝峯寫法,例:'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>
2、字符串中出現最多的字符和個數
常規寫法:利用對象字面量
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、給字符串加千分符
常規解法:裏面包含了幾個小技巧,還挺巧妙的。先把三位多餘的部分從前面拿出來,把後面整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));
4、返回只包含數字類型的數組,例:'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>