web前端面试系列 - 算法( 数组去重 )

1. 思路:设置一个临时数组temp,然后遍历要去重的数组arr,如果arr中的元素能够在temp中找到,则跳过此元素,否则将此元素存入temp,最后返回temp。

实现一

1 function unique(arr){
2     var temp = [];
3     var len = arr.length;
4     for(var i = 0; i < len; i++){
5         if(temp.indexOf(arr[i]) === -1) temp.push(arr[i]);
6     }
7     return temp;
8 }

实现二

 1 function unique( arr ) {
 2     var temp = [];
 3     var len = arr.length;
 4     for (var i = 0; i < len; i++) {
 5         var isRepeated = true;
 6         for ( var j = 0; j < temp.length; j++){
 7                 if ( arr[i] === temp[j] ) break;
 8                 isRepeated = false;
 9         }
10         if ( !isRepeated ) temp.push( arr[i] );
11     }
12     return temp;
13 }

2. 思路:设置一个临时数组temp,然后遍历要去重的数组arr,如果arr[i]中的元素在arr中出现的第一次的位置也为i,则将其存入temp,否则跳过此元素,最后返回temp。

1 function unique(arr){
2     var temp = [];
3     var len = arr.length;
4     for (var i = 0; i <len; i++){
5         if(arr.indexOf[arr[i] === i) temp.push(arr[i]);
6     }
7     return temp;
8 }

3. 思路:设置一个临时对象tempObj,然后遍历要去重的数组arr, 如果arr[i]中的元素在此对象中有标记,则跳过,否则在临时对象中进行标记,并将其存入临时数组tempArr, 最后返回tempArr。

 1 function unique(arr){
 2     var tempObj = {};
 3     var tempArr = [];
 4     var len = arr.length;
 5     for (var i = 0; i < len; i++) {
 6         if ( !tempObj[arr[i]] ){
 7             tempObj[arr[i]] = true;
 8             tempArr.push(arr[i]);
 9         }
10     }
11     return tempArr;
12 }

4. 思路:对要去重的数组 arr 先进行排序,这样重复的元素就排在了相邻的位置,然后对数组 arr 进行遍历,将arr[i] 与 临时数组 temp 中的最后一个元素进行比较,如果不同则将其存入临时数组,如果相同则跳过此元素,最后返回临时数组。

 1 function unique( arr ) {
 2     var temp = [];
 3     var len = arr.length;
 4     arr.sort();
 5     temp.push(arr[0]);
 6     for ( var i = 1; i < len; i++ ) {
 7         if ( arr[i] !== temp[temp.length-1] ) temp.push(arr[i]);
 8     }
 9     return temp;
10 }

写在最后:其实在真实的项目中,我们没有必要自己去实现这样的函数,利用underscore.js 或者lodash 这样的函数库提供的方法是更好的选择。

时间: 2024-08-01 14:21:57

web前端面试系列 - 算法( 数组去重 )的相关文章

web前端面试系列 - 数据结构(两个栈模拟一个队列)

一. 用两个栈模拟一个队列 思路一: 1. 一个栈s1作为数据存储,另一个栈s2,作为临时数据存储. 2. 入队时将数据压人s1 3. 出队时将s1弹出,并压人s2,然后弹出s2中的顶部数据,最后再将剩余数据弹出s2,并压人s1. 思路二: 1. 一个栈s1作为数据存储,另一个栈s2,作为临时数据存储. 2. 入队时,判断s1, 是否为空,如果不为空,则将数据直接压入s1, 如果为空,则将s2中的数据全部倒入s1,在将数据压人s1. 3. 出队时,判断s2, 是否为空,如果不为空,则直接弹出s2

Web前端面试笔试题总结

最近一段时间要毕业了,忙着找工作,见过不少笔试面试题,自己总结了一些加上网上找的一些整合了一下.答案暂时都东拼西凑出来了,但是还是先不发出来,一方面是答案并不是唯一的并且自己的答案不能保证对,另一方面希望看到本文的伙伴能自己去找答案,毕竟,技术只有自己真正理解了才是自己的东西,共勉. 小白第一次发文,恭请指点. Web前端面试笔试题 Html+css 1.对WEB标准以及w3c的理解与认识. 2.Xhtml和html有什么区别. 3.css的引入方式有哪些?link和@import的区别是? 4

百度web前端面试2015.10.18

邮件里通知的周日下午两点参加百度校招面试,我13:10分就到了,前台先让我拿了个面试资格单(上面是我的信息),然后在web前端面试入口排队,面试在百度食堂举行的,等了大概1个小时,放我去面试.都是一对一面试,人很多. 下面是面试过程:没让我自我介绍,有的会让先自我介绍,简单看了下我的简历开始问我是不是自学的,(计算机专业不开设这个专业,都是自学加项目经验)为什么选择前端开发,你怎么看前端开发这个岗位的.说那这样我就从简单到难的问你,由浅入深就知道你的水平了,面试官都很年轻,人都不错. 1:说一下

百度Web前端面试经历

今天面了百度的前端实习职位.一面.时间大概是50分钟.面试官是位很帅气的小伙子,非常友好的一个人.进门的时候他让我等一会,我瞄了一眼他的电脑屏幕,发现他在coding…… 9点50开始的面试. 面试官:自我介绍一下. 我:blablabla. 面试官:javascript的类型转换(比如"2"*1, "a"*1). 我:javascript会调用valueOf来转换为一个基本数据类型,在这种情况下,如果javascript不能通过valueOf转成一个number,

web前端面试经历分享

十天前,我还在纠结这个暑假到底是呆在实验室研究技术好还是找一份实习见识世面好,而现在我已经接到offer准备工作了.这几天真是累得够呛,一方面需要拼命准备期末考试,另一方面,需要往公司里面跑接受面试.欣慰的是,我不仅顺利通过了公司的面试,还认识了好几个厉害的师兄,自己的人生规划也稍有改变. 开始的纠结是有原因的,主要是考虑到了一下几个方面: 第一,作为一个大二的学生有必要这么着急跑出去找实习么? 第二,去找实习主要目的应该是赚钱还是学习技术? 第三,难得有那么两个月的时间,就这样去工作了会不会浪

web前端面试总结

本文由我收集总结了一些前端面试题,初学者阅后也要用心钻研其中的原理,重要知识需要系统学习.透彻学习,形成自己的知识链.万不可投机取巧,临时抱佛脚只求面试侥幸混过关是错误的!也是不可能的! 前端还是一个年轻的行业,所以关注各种前端技术,跟上快速变化的节奏,也是身为一个前端程序员必备的技能之一. 前端开发知识点: HTML&CSS: 对Web标准的理解.浏览器内核差异.兼容性.hack.CSS基本功:布局.盒子模型.选择器优先级. HTML5.CSS3.Flexbox JavaScript: 数据类

前端日常开发常用功能系列之数组去重

这是前端日常开发常用功能这个系列文章的第一篇,该系列是日常开发中一些常用的功能的再总结.再提炼,以防止遗忘,便于日后复习.该系列预计包含以下内容: 防抖.节流.去重.拷贝.最值.扁平.偏函数.柯里.惰性函数.递归.乱序.排序.注入.上传.下载.截图... 本文所记录的数组去重方法只针对一维数组,且数组项都是基本数据类型值 方法一: 二重循环比较去重(因为使用的是‘===’比较,适合数组项为数值.字符串的数组) const unique1 = arr => { const tempArr = ar

Web前端面试题目及答案汇总

前端新人在面试前都比较焦虑,担心回答不上面试官的问题,也担心自己紧张,其实这都是心理没底的表现,今天和大家分享web前端开发常见面试题及答案,希望可以帮助即将面试的前端同学顺利通过面试. HTML/CSS部分 1.什么是盒子模型? 在网页中,一个元素占有空间的大小由几个部分构成,其中包括元素的内容(content),元素的内边距(padding),元素的边框(border),元素的外边距(margin)四个部分.这四个部分占有的空间中,有的部分可以显示相应的内容,而有的部分只用来分隔相邻的区域或

web前端面试摘要

摘要的面试题,CSS+HTML部分 HTML+CSS 1.对WEB标准以及W3C的理解与认识?(1)web标准规范要求,书写标签必须闭合.标签小写.不乱嵌套,可提高搜索机器人对网页内容的搜索几率:(2)建议使用外链css和js脚本,从而达到结构与行为.结构与表现的分离,提高页面的渲染速度,能更快地显示页面的内容:(3)样式与标签的分离,更合理的语义化标签,使内容能被更多的用户所访问.内容能被更广泛的设备所访问.更少的代码和组件, 从而降低维护成本.改版更方便:(4)不需要变动页面内容,便可提供打