天津web前端培训学校,跃过JS的龙门,你就是真正的锦鲤

2018-10-31 浏览0次

天津web前端培训学校,跃过JS的龙门,你就是真正的锦鲤

J:明天要去面前端了……瑟瑟发抖.jpg

S:快复习JS!面试必考啊!

 

web前端面试中,JS相关问题算得上是重头戏。当前环境下,初级前端很多很多,公司都不缺,缺少的是中级前端。中级前端对JavaScript的要求可谓是必备,对JS的掌握程度是公司判断应聘者能力水平的重要依据之一,可能一道js面试题就决定了你的去留

 

JS面试常见问题之一:数组去重(因为工作中贼常用,你说不会行么?)。

 

如何用JavaScript进行数组去重?可以用哪些方法完成?各种去重方法的优劣如何?

小筑为大家总结了几种数组去重的方法,欢迎小伙伴一起来讨论切磋。

 

 

 

方法一:遍历数组法

var arr = [4, 1, 2, 3, 3, 6, 5];

function elDup1(array) {

var orr = [];

for(var i = 0; i < array.length; i++) {

if(orr.indexOf(array[i]) == -1) {

orr.push(array[i]);

}

}

return orr;

}

var brr = elDup1(arr);

console.log(brr);

 

思路:这个方法只需要解析orr.indexOf(array[i]==-1)即可,遍历数组array,如果orr中元素array[i]的索引为-1(代表orr中没有元素array[i]),把这个元素放进新数组,得到的也是新的去重数组,然后返回这个新数组就可以了。

 

特点:简单易理解,js引擎在实现这个方法的时,会遍历数组直到找到目标为止。正因为遍历数组,故当数据过多会导致执行较慢。

 

 

 

方法二:先排序后去重

var arr = [4, 1, 2, 3, 3, 6, 5];

function elDup2(arr) {

arr.sort();

var orr = [arr[0]];

for(var i = 1; i < arr.length; i++) {

//前一个与后一个是否相同,不相同则添加到对应的orr数组中

arr[i] !== orr[orr.length - 1] && orr.push(arr[i]);

}

return orr;

}

var brr = elDup2(arr);

console.log(brr);

 

思路:将待去重数组进行排序(用sort()函数实现),采用循环判断,判断元素i和元素i的下一个是否相等,不相同就把元素i放进新数组。因为已经排序,所以重复元素会在相邻位置,如果不相同,则将该元素存入结果数组中。

 

特点:使用了原生的JS先将数组排序后比较,比上一种方法少了一次遍历,有更高的效率。

 

 

方法三:对象键值表法

var arr = [4, 1, 2, 3, 3, 6, 5];

function elDup3(arr) {

var orr = [],obj = {}, j = arr.length;

for(var i = 0; i < j; i++) {

if(!obj[arr[i]]) {

orr.push(arr[i]);

obj[arr[i]] = 1;

}

}

return orr;

}

var brr = elDup3(arr);

console.log(brr);

 

思路:遍历当前数组中每个元素,同时创建一个对象和一个结果数组,把已经出现过的通过下标的形式存入一个对象内,

 

特点:因为引用下标,比用index Of搜节省时间。但是多了hash表,内存占用多,这就是所谓的空间换时间。

 

以上三种方法希望可以帮到大家,如果有更好的方法,欢迎在下面留言讨论!


该内容系 诚筑说 制作上传并发布,文章图文内容系该用户观点,并不是也不反映培训通平台之任何意见和主张,也不表示培训通同意或支持该用户上的任何内容、主张或立场。培训通对第三方内容之合法性、准确性、真实性、适用性、安全性等概不负责,也无法负责。若该网页内容涉嫌侵权,请发邮件qq:16720809。
温馨提示: 提交留言后老师会第一时间与您联系! 热线电话:4006664820