面试常见的js算法题
我们去面试一般都有笔试,笔试题一般都会涉及到很多算法的东西。
不管你用的多不多,反正就是要会。不然笔试很难过。
就算是直接面试的,有时候也会遇到面试官直接叫你当场写个算法题出来这种情况。
因为笔试时间很有限,不会出很复杂的题目,所以笔试怎么出都不会离开下面这几种题。
废话不多说,下面来列出主要的几个算法题。
1.排序
一般都是给个数组然后排序,有的从小到大,有的从大到小。一定要看清楚。以下都是从小到大的排序算法。
冒泡法
vararr=[3,6,1,2,5]; vartemp; for(vari=0;iarr[j]){ temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } console.log(arr); 
快速排序法
functionquicksort(arr){
if(arr.length<=1){
returnarr;
}
varleft=[];
varright=[];
varmiddle=arr[0];
for(vari=1;i
注意:可以用快速就不要用冒泡。实在没记住才用冒泡。(因为快速排序设计到递归,面试官更多是想考察你递归算法)
2.数组去重
这题考察的是你会不会存储数组元素的出现次数来解决去重问题。当然解法也有很多,下面是其中一种解法。
Array.prototype.unique=function(){
varres=[];
varjson={};
for(vari=0;i
3.js的拷贝
这题涉及到的就是你能不能清楚的分辨深拷贝和浅拷贝。
vara={name:'Tom'}; varb=a; b.name='Peter'; 
请问a.name=?
正确答案是Peter,如果你的答案是Tom的话,那么你要好好去看看js的深拷贝。
如果要被拷贝的是数组:
slice和concat都可以直接让数组进行深拷贝
arr.slice();
arr.concat();
下面是解法。当然肯定有比我写得更好的。
functiondeepCopy(source){
varresult={};
for(variinsource){
if(typeofsource[i]==="object"){
result[i]=deepCopy(source[i]);
}else{
result[i]=source[i];
}
}
returnresult;
}
4.获取字符串里出现子串的位置
functionappear(str,str_target){
varn=0;
varresult=[];
while(str.indexOf(str_target,n)!=-1&&n
5.不确定数量的数组遍历组合算法
好吧,解释下这题。这题在现实中确实会用到。尤其是做商城网站时,sku的算法真的经常会遇到。
这题的意思就是说。相当于说[1,2,3],[4,5]。。。。的不确定个数的数组进行遍历组合,组成[[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]这样。然后数组越多,组出来就肯定越多。
那怎么做的,我上网查了一些相关算法都没找到好的,然后我就自己写。可能还是会有点毛病,大家将就看。
有写的更好的欢迎评论教我一下。
functiongroup(arr,re){
if(arr.length<=0){
returnre;
}
if(!re){
vararr=arr.slice();
varre=arr.shift();
returngroup(arr,re);
}else{
varnow=arr.shift();
varnewre=[];
for(varj=0;j
6.lazyMan(这道题考察了很多内容)
这道题自行百度吧。。只要百度lazyMan面试题,应该是可以搜出来的
7.编写一个函数fn(Numbern),将数字转为大写输出,如输入123,输出一百二十三。
好吧,这道题我是忘了我看的本站的哪位的文章了,觉得确实有点意思。
下面是他的代码。
functionfn(n){
if(!/^([1-9]\d*)/.test(n)){
return'非法数据';
}
varunit='千百十亿千百十万千百十个';
if(n.length>unit.length){
return'数据过长';
}
varnewStr='';
varnlength=n.length;
unit=unit.substr(unit.length-nlength);
for(vari=0;i
8.如何将浮点数左边的数每三位添加逗号
如1200000.11转成12,000,000.11
result=num&&num.toString().replace(/(\d)(?=(\d{3})+\.)/g,function($1,$2){
return$2+',';
})
上面的解法是用正则,当然你也可以用别的方法。
以上就是面试常见题目。可能会有遗漏。欢迎补充。
不要光看。。要自己动手写一下,不然你以为你看会了。其实要你写,你还是写不出。
ok.就这样。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持毛票票!