您好,登錄后才能下訂單哦!
這篇文章主要介紹面試常見的js算法題有哪些,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
1.排序
一般都是給個(gè)數(shù)組然后排序,有的從小到大,有的從大到小。一定要看清楚。以下都是從小到大的排序算法。
冒泡法
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)); }
注意:可以用快速就不要用冒泡。實(shí)在沒記住才用冒泡。(因?yàn)榭焖倥判蛟O(shè)計(jì)到遞歸,面試官更多是想考察你遞歸算法)
2.數(shù)組去重
這題考察的是你會(huì)不會(huì)存儲(chǔ)數(shù)組元素的出現(xiàn)次數(shù)來(lái)解決去重問題。當(dāng)然解法也有很多,下面是其中一種解法。
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';
請(qǐng)問a.name = ?
正確答案是Peter,如果你的答案是Tom的話,那么你要好好去看看js的深拷貝。
如果要被拷貝的是數(shù)組:
slice和concat都可以直接讓數(shù)組進(jìn)行深拷貝
arr.slice(); arr.concat();
下面是解法。當(dāng)然肯定有比我寫得更好的。
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.獲取字符串里出現(xiàn)子串的位置
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.不確定數(shù)量的數(shù)組遍歷組合算法
好吧,解釋下這題。這題在現(xiàn)實(shí)中確實(shí)會(huì)用到。尤其是做商城網(wǎng)站時(shí),sku的算法真的經(jīng)常會(huì)遇到。
這題的意思就是說。相當(dāng)于說[1,2,3],[4,5]。。。。的不確定個(gè)數(shù)的數(shù)組進(jìn)行遍歷組合,組成[[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]這樣。然后數(shù)組越多,組出來(lái)就肯定越多。
那怎么做的,我上網(wǎng)查了一些相關(guān)算法都沒找到好的,然后我就自己寫??赡苓€是會(huì)有點(diǎn)毛病,大家將就看。
有寫的更好的歡迎評(píng)論教我一下。
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(這道題考察了很多內(nèi)容)
這道題自行百度吧。。只要百度lazyMan 面試題,應(yīng)該是可以搜出來(lái)的
7.編寫一個(gè)函數(shù)fn(Number n),將數(shù)字轉(zhuǎn)為大寫輸出,如輸入123,輸出一百二十三。
好吧,這道題我是忘了我看的本站的哪位的文章了,覺得確實(shí)有點(diǎn)意思。
下面是他的代碼。
function fn(n){ if(!/^([1-9]\d*)/.test(n)){ return '非法數(shù)據(jù)'; } var unit = '千百十億千百十萬(wàn)千百十個(gè)'; if(n.length > unit.length){ return '數(shù)據(jù)過長(zhǎng)'; } 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(/零(千|百|(zhì)十)/g,'零').replace(/(零)+/g,'零').replace(/零(億|萬(wàn))/g,'$1'); return newStr; } console.log(fn('205402002103'));
8.如何將浮點(diǎn)數(shù)左邊的數(shù)每三位添加逗號(hào)
如1200000.11轉(zhuǎn)成12,000,000.11
result = num && num.toString().replace(/(\d)(?=(\d{3})+\.)/g,function($1,$2){ return $2 + ','; })
上面的解法是用正則,當(dāng)然你也可以用別的方法。
以上就是面試常見題目。可能會(huì)有遺漏。歡迎補(bǔ)充。
不要光看。。要自己動(dòng)手寫一下,不然你以為你看會(huì)了。其實(shí)要你寫,你還是寫不出。
ok. 就這樣。
以上是“面試常見的js算法題有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。