面试常见的js算法题


Posted in Javascript onMarch 23, 2017

我们去面试一般都有笔试,笔试题一般都会涉及到很多算法的东西。

不管你用的多不多,反正就是要会。不然笔试很难过。

就算是直接面试的,有时候也会遇到面试官直接叫你当场写个算法题出来这种情况。

因为笔试时间很有限,不会出很复杂的题目,所以笔试怎么出都不会离开下面这几种题。

废话不多说,下面来列出主要的几个算法题。

1.排序

一般都是给个数组然后排序,有的从小到大,有的从大到小。一定要看清楚。以下都是从小到大的排序算法。

冒泡法

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. 就这样。

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jQuery scroll事件实现监控滚动条分页示例
Apr 04 Javascript
js实现点击左右按钮轮播图片效果实例
Jan 29 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
Aug 11 Javascript
Jquery循环截取字符串的方法(多出的字符串处理成&quot;...&quot;)
Nov 28 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
Oct 31 Javascript
解决vue中对象属性改变视图不更新的问题
Feb 23 Javascript
Bootstrap Fileinput 4.4.7文件上传实例详解
Jul 25 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
Feb 19 Javascript
JS实现导航栏楼层特效
Jan 01 Javascript
微信小程序地图绘制线段并且测量(实例代码)
Jan 02 Javascript
javascript 内存模型实例详解
Apr 18 Javascript
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
Vue.Js中的$watch()方法总结
Mar 23 #Javascript
Vue 2.X的状态管理vuex记录详解
Mar 23 #Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 #jQuery
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
Mar 23 #jQuery
jQuery插件FusionWidgets实现的Cylinder图效果示例【附demo源码】
Mar 23 #jQuery
JS中SetTimeout和SetInterval使用初探
Mar 23 #Javascript
深入学习 JavaScript中的函数调用
Mar 23 #Javascript
You might like
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
php图片上传类 附调用方法
2016/05/15 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
Jquery 组合form元素为json格式,asp.net反序列化
2009/07/09 Javascript
图片在浏览器中底部对齐 解决方法之一
2011/11/30 Javascript
解析页面加载与js函数的执行 onload or ready
2013/12/12 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
JsRender for index循环索引用法详解
2014/10/31 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
在JavaScript的正则表达式中使用exec()方法
2015/06/16 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
jquery validate表单验证插件
2016/09/06 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
vue2.0在table中实现全选和反选的示例代码
2017/11/04 Javascript
使用Vuex实现一个笔记应用的方法
2018/03/13 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
2018/04/17 jQuery
vue中使用rem布局代码详解
2019/10/30 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
vue 如何从单页应用改造成多页应用
2020/10/23 Javascript
[49:20]2014 DOTA2国际邀请赛中国区预选赛5.21 CIS VS TongFu
2014/05/22 DOTA
Python 文件重命名工具代码
2009/07/26 Python
numpy中实现二维数组按照某列、某行排序的方法
2018/04/04 Python
实例介绍Python中整型
2019/02/11 Python
python使用selenium实现批量文件下载
2019/03/11 Python
python使用threading.Condition交替打印两个字符
2019/05/07 Python
python基于FTP实现文件传输相关功能代码实例
2019/09/28 Python
使用JS+CSS3技术:让你的名字动起来
2013/04/27 HTML / CSS
纯css实现照片墙3D效果的示例代码
2017/11/13 HTML / CSS
经典C++面试题一
2016/11/06 面试题
求职简历中个人的自我评价
2013/12/01 职场文书
客服部班长工作责任制
2014/02/25 职场文书
政府信息公开实施方案
2014/05/09 职场文书
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js
win10电脑老是死机怎么办?win10系统老是死机的解决方法
2022/08/05 数码科技