天津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表,内存占用多,这就是所谓的空间换时间。
以上三种方法希望可以帮到大家,如果有更好的方法,欢迎在下面留言讨论!
资讯来源:诚筑说
|