面试常见的js算法题
发布时间 - 2026-01-11 00:19:36 点击率:次我们去面试一般都有笔试,笔试题一般都会涉及到很多算法的东西。

不管你用的多不多,反正就是要会。不然笔试很难过。
就算是直接面试的,有时候也会遇到面试官直接叫你当场写个算法题出来这种情况。
因为笔试时间很有限,不会出很复杂的题目,所以笔试怎么出都不会离开下面这几种题。
废话不多说,下面来列出主要的几个算法题。
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手写代码无敌秘籍(推荐)
# 递归
# 的是
# 都是
# 这道
# 可以用
# 遍历
# 好吧
# 越多
# 不确定
# 涉及到
# 从小到大
# 面试官
# 我是
# 你好
# 几个
# 我就
# 都有
# 也有
# 会有
# 也会
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
Laravel队列由Redis驱动怎么配置_Laravel Redis队列使用教程
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
南京网站制作费用,南京远驱官方网站?
高性价比服务器租赁——企业级配置与24小时运维服务
Laravel storage目录权限问题_Laravel文件写入权限设置
如何彻底卸载建站之星软件?
如何快速搭建自助建站会员专属系统?
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
如何快速生成可下载的建站源码工具?
为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
微信小程序 HTTPS报错整理常见问题及解决方案
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
如何快速搭建高效WAP手机网站吸引移动用户?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Python文件操作最佳实践_稳定性说明【指导】
详解Oracle修改字段类型方法总结
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
在线制作视频网站免费,都有哪些好的动漫网站?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程
Laravel如何使用Telescope进行调试?(安装和使用教程)
Python结构化数据采集_字段抽取解析【教程】
手机软键盘弹出时影响布局的解决方法
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
Laravel怎么使用artisan命令缓存配置和视图
js实现点击每个li节点,都弹出其文本值及修改
如何在IIS中配置站点IP、端口及主机头?
如何快速查询域名建站关键信息?
如何在阿里云域名上完成建站全流程?
网站制作企业,网站的banner和导航栏是指什么?
如何在IIS管理器中快速创建并配置网站?
Laravel如何使用Eloquent进行子查询
JS经典正则表达式笔试题汇总
零服务器AI建站解决方案:快速部署与云端平台低成本实践
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】
利用JavaScript实现拖拽改变元素大小
制作企业网站建设方案,怎样建设一个公司网站?
Android仿QQ列表左滑删除操作
使用C语言编写圣诞表白程序
Laravel如何使用Blade模板引擎?(完整语法和示例)
高防服务器租用首荐平台,企业级优惠套餐快速部署
如何快速搭建高效香港服务器网站?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
如何快速搭建高效WAP手机网站?
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优

