国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

面試常見的js算法題

2024-05-06 16:36:08
字體:
來源:轉載
供稿:網友

我們去面試一般都有筆試,筆試題一般都會涉及到很多算法的東西。

不管你用的多不多,反正就是要會。不然筆試很難過。

就算是直接面試的,有時候也會遇到面試官直接叫你當場寫個算法題出來這種情況。

因為筆試時間很有限,不會出很復雜的題目,所以筆試怎么出都不會離開下面這幾種題。

廢話不多說,下面來列出主要的幾個算法題。

1.排序

一般都是給個數組然后排序,有的從小到大,有的從大到小。一定要看清楚。以下都是從小到大的排序算法。

冒泡法

js;"> var arr = [3,6,1,2,5]; var temp; for(var i= 0;i<arr.length;i++){ for(var j=i+1;j<arr.length;j++){ if(arr[i] > arr[j]){ temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } console.log(arr);

快速排序法

function quicksort (arr){ if(arr.length<=1){ return arr; } var left = []; var right = []; var middle = arr[0]; for(var i=1;i<arr.length;i++){ if(arr[i]<middle){ left.push(arr[i]); }else{ right.push(arr[i]); } } return quicksort(left).concat([middle],quicksort(right));}

注意:可以用快速就不要用冒泡。實在沒記住才用冒泡。(因為快速排序設計到遞歸,面試官更多是想考察你遞歸算法)

2.數組去重

這題考察的是你會不會存儲數組元素的出現次數來解決去重問題。當然解法也有很多,下面是其中一種解法。

Array.prototype.unique = function(){ var res = []; var json = {}; for(var i = 0; i < this.length; i++){ if(!json[this[i]]){ res.push(this[i]); json[this[i]] = 1; } } return res;}var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];alert(arr.unique());

3.js的拷貝

這題涉及到的就是你能不能清楚的分辨深拷貝和淺拷貝。

var a = {name:'Tom'};  var b = a;  b.name = 'Peter'; 

請問a.name = ?

正確答案是Peter,如果你的答案是Tom的話,那么你要好好去看看js的深拷貝。

如果要被拷貝的是數組:

slice和concat都可以直接讓數組進行深拷貝

arr.slice();arr.concat();

下面是解法。當然肯定有比我寫得更好的。

function deepCopy(source){ var result = {}; for(var i in source){ if(typeof source[i] === "object"){ result[i] = deepCopy(source[i]); }else{ result[i] = source[i]; } } return result;}

4.獲取字符串里出現子串的位置

function appear(str,str_target){ var n = 0; var result = []; while(str.indexOf(str_target,n)!=-1 && n < str.length){ result.push(str.indexOf(str_target,n)); n = str.indexOf(str_target,n) + str_target.length; } return result;}var arr = appear('abascbascbabasbascbascascbab','ab');console.log(arr);

5.不確定數量的數組遍歷組合算法

好吧,解釋下這題。這題在現實中確實會用到。尤其是做商城網站時,sku的算法真的經常會遇到。

這題的意思就是說。相當于說[1,2,3],[4,5]。。。。的不確定個數的數組進行遍歷組合,組成[[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]這樣。然后數組越多,組出來就肯定越多。

那怎么做的,我上網查了一些相關算法都沒找到好的,然后我就自己寫。可能還是會有點毛病,大家將就看。

有寫的更好的歡迎評論教我一下。

function group(arr,re){ if(arr.length <=0){ return re; } if(!re){ var arr = arr.slice(); var re = arr.shift(); return group(arr,re); }else{ var now = arr.shift(); var newre = []; for(var j=0;j<now.length;j++){ for(var k=0;k<re.length;k++){ var temp = []; if(re[k] instanceof Array){  temp = re[k]; }else{  temp.push(re[k]); } newre.push(temp.concat(now[j])); } } return group(arr,newre); }}var arr = [['a','b','c'],['e','d','f'],['h','i'],['j','k','l','m']];// var arr = [['a','b','c'],['e','d','f'],['h','i']];// console.log(arr);var result = group(arr);console.log(result); 

6.lazyMan(這道題考察了很多內容)

這道題自行百度吧。。只要百度lazyMan 面試題,應該是可以搜出來的

7.編寫一個函數fn(Number n),將數字轉為大寫輸出,如輸入123,輸出一百二十三。

好吧,這道題我是忘了我看的本站的哪位的文章了,覺得確實有點意思。

下面是他的代碼。

function fn(n){ if(!/^([1-9]/d*)/.test(n)){  return '非法數據'; } var unit = '千百十億千百十萬千百十個'; if(n.length > unit.length){  return '數據過長'; } var newStr = ''; var nlength = n.length; unit = unit.substr(unit.length - nlength); for(var i = 0; i < nlength; i++){  newStr += '零一二三四五六七八九'.charAt(n[i]) + unit.charAt(i); } newStr = newStr.substr(0,newStr.length-1); newStr = newStr.replace(/零(千|百|十)/g,'零').replace(/(零)+/g,'零').replace(/零(億|萬)/g,'$1'); return newStr;}console.log(fn('205402002103'));

8.如何將浮點數左邊的數每三位添加逗號

如1200000.11轉成12,000,000.11

result = num && num.toString().replace(/(/d)(?=(/d{3})+/.)/g,function($1,$2){ return $2 + ',';})

上面的解法是用正則,當然你也可以用別的方法。

以上就是面試常見題目。可能會有遺漏。歡迎補充。

不要光看。。要自己動手寫一下,不然你以為你看會了。其實要你寫,你還是寫不出。

ok. 就這樣。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持VeVb武林網!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西丰县| 祁阳县| 工布江达县| 仲巴县| 鄂托克前旗| 建水县| 武陟县| 土默特右旗| 巴中市| 容城县| 精河县| 舞钢市| 五大连池市| 山丹县| 万全县| 太谷县| 余姚市| 石门县| 德庆县| 宁强县| 玉龙| 洛川县| 德惠市| 互助| 蓝田县| 巴林右旗| 保定市| 浦县| 同心县| 二连浩特市| 霸州市| 乌鲁木齐市| 儋州市| 石嘴山市| 海丰县| 潞城市| 石屏县| 酉阳| 临桂县| 五常市| 松溪县|