前言 技術經理(以下簡稱“大歡哥”,因為大歡哥人高馬大的)一日出差回來,在樓下休息聽到 “今日頭條” 的前端網面(頭條就在我們公司隔壁。公司樓下有休息區,可以坐那喝咖啡)。兩個javaScript題目。 今天早上來上班,包還沒放下,就一臉神秘的對我說 “ 我這聽到 頭條的前端面試題,等我吃完飯回來給 ...
前言
技術經理(以下簡稱“大歡哥”,因為大歡哥人高馬大的)一日出差回來,在樓下休息聽到 “今日頭條” 的前端網面(頭條就在我們公司隔壁。公司樓下有休息區,可以坐那喝咖啡)。兩個javaScript題目。
今天早上來上班,包還沒放下,就一臉神秘的對我說 “ 我這聽到 頭條的前端面試題,等我吃完飯回來給你說,考考你,嘿嘿 ”,我的小心肝一下就緊張了。“頭條”、“面試題”...貌似人生巔峰來了!!!做出來就有白富美啦!!!
終於吃完飯回來了,出題了.....
正文
回歸技術!!!回歸正文!!!
題目一:輸入框實現輸入文字,後臺請求獲取數據,用戶輸入後JS可以性能丟丟,減少請求次數!
具體表現:用戶連續輸入“abc”,查詢 “abc”,而不是查詢“a”,“ab”,“abc”。。。
關鍵點:用戶輸入 間隔時間 滿足要求則請求
實現代碼:(歡迎指正)
1 <input type="text" name="" id="search_text"> 2 <script type="text/javascript"> 3 var lastValue,//上一次輸入值 4 inputIng;//定時器保存 5 document.getElementById('search_text').oninput=function(){ 6 //監聽input值變化 7 var input=false,//是否在輸入狀態 8 that=this; 9 window.clearTimeout(inputIng); 10 inputIng=setTimeout(function(){ 11 if(!input){ 12 if(lastValue==that.value){ 13 return; 14 } 15 console.log(that.value); 16 lastValue=that.value; 17 input=true; 18 } 19 },800);//時間調整確定用戶輸入間隔 實踐之後800ms最合適 20 } 21 </script>
題目二:實現一個Function,要求入參為array,返回一個方法,調用方法返回數組中的一個值,值不重覆,數組所有值返回完畢,重新返回!
關鍵點:數組在記憶體中的存儲
實現代碼:(此處貼我實現的代碼,與要求有差距)。
1 //我寫的(大錯誤改正了,還有一個隱藏錯誤) 2 function ran(arr){ 3 this.arr=arr.join(',').split(',');//當前操作數組 4 this.oldArr=arr.join(',').split(',');//備份數組 5 this.randomNum=function(){//定義方法操作數組返回值 6 if(this.arr.length==0)this.arr=this.oldArr.jion(',').split(',');//如果當前操作數組值沒有了,就從備份數組中備份 7 var index=Math.round(Math.random()*this.arr.length-1);//獲取數組中隨機下標四捨五入取整數 (此寫法有錯,自己思考改正) 8 return this.arr.splice(index,1).toString();//返回下標對應的值 9 }; 10 } 11 var arr=[0,1,2,3,4,5]; 12 var a = new ran(arr); 13 console.log(a.randomNum()); 14 15 //大歡哥寫的 參考思路實現,不是大歡哥原代碼 16 function Ran(arr){ 17 var newArr = arr.slice(); 18 var TemArr = arr.slice(); 19 return function(){ 20 if(newArr.length==0){ 21 newArr=TemArr.slice(); 22 } 23 var index = Math.floor(Math.random()*newArr.length); 24 var keyVale = newArr[index]; 25 newArr.splice(index,1); 26 return keyVale; 27 }; 28 } 29 30 var fun = Ran(arr); 31 console.log(fun());
最後測試結果是:功能都實現(忽略我的隱藏bug),大歡哥寫的性能在我的150%以上!
測試代碼得出:1、' '+Num 轉字元串的方式比 Num.toString() 性能高
2、由上衍生出,以下方式一和和方式二對比,誰隨機的數比較公平(下一個隨筆會詳細論證)
var ran1 = Math.floor(Math.random()*a.length);//方式一 var ran2 = Math.round(Math.random()*(a.length-1));//方式二
3、儘量精簡API的調用
結束總結
程式員的世界你不懂!為了討論問題可以不吃飯、可以不回家、可以一個問題誕生很多問題。。。。。