全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

面试常见的js算法题

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

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

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

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

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

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

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


# js  # 算法题  # js常见算法题  # 面试题  # 13道关于JavaScript正则表达式的面试题  # 详解JS中的this、apply、call、bind(经典面试题)  # 关于javascript作用域的常见面试题分享  # 10道典型的JavaScript面试题  # 80%应聘者都不及格的JS面试题  # Javascript前端经典的面试题及答案  # JavaScript中最常见的三个面试题解析  # 一篇文章搞定JavaScript类型转换(面试常见)  # 总结几道关于Node.js的面试问题  # 「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)  # 递归  # 的是  # 都是  # 这道  # 可以用  # 遍历  # 好吧  # 越多  # 不确定  # 涉及到  # 从小到大  # 面试官  # 我是  # 你好  # 几个  # 我就  # 都有  # 也有  # 会有  # 也会 


相关文章: 常州自助建站工具推荐:低成本搭建与模板选择技巧  网站图片在线制作软件,怎么在图片上做链接?  网站制作知乎推荐,想做自己的网站用什么工具比较好?  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  如何挑选高效建站主机与优质域名?  智能起名网站制作软件有哪些,制作logo的软件?  专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  如何在Windows虚拟主机上快速搭建网站?  如何用IIS7快速搭建并优化网站站点?  建站之星如何助力企业快速打造五合一网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  网站制作网站,深圳做网站哪家比较好?  常州自助建站费用包含哪些项目?  如何在服务器上配置二级域名建站?  如何快速完成中国万网建站详细流程?  如何通过山东自助建站平台快速注册域名?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  如何高效利用亚马逊云主机搭建企业网站?  如何在万网自助建站中设置域名及备案?  PHP 500报错的快速解决方法  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  英语简历制作免费网站推荐,如何将简历翻译成英文?  5种Android数据存储方式汇总  整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?  建站之星如何修改网站生成路径?  如何通过老薛主机一键快速建站?  专业网站制作服务公司,有哪些网站可以免费发布招聘信息?  宁波自助建站系统如何快速打造专业企业网站?  公司网站制作价格怎么算,公司办个官网需要多少钱?  建站之星北京办公室:智能建站系统与小程序生成方案解析  建站之星微信建站一键生成小程序+多端营销系统  我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?  如何通过远程VPS快速搭建个人网站?  实现虚拟支付需哪些建站技术支撑?  网站制作报价单模板图片,小松挖机官方网站报价?  网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?  电商网站制作公司有哪些,1688网是什么意思?  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何通过VPS建站无需域名直接访问?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  建站之星如何开启自定义404页面避免用户流失?  如何在橙子建站上传落地页?操作指南详解  如何选择美橙互联多站合一建站方案?  宝塔建站后网页无法访问如何解决?  建站主机选购指南与交易推荐:核心配置解析  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七) 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。