版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012194956/article/details/79508916
面视频考
数组去重有一下集中常用方法:
1.双层循环(适用该法,因为兼容性好):
function unique(array){
var res=[];
for(var i=0;i<array.length;i++){
for(var j=0;j<res.length;j++){
if(array[i]===res[j]){
break;
}
}
if(j==res.length){
res.push(array[i]);
}
}
return res;
}
测试:
2.indexOf(比较方便,但是兼容性差,IE8以下不支持此方法)
function unique(array){
var res=[];
for(var i=0;i<array.length;i++){
if(res.indexOf(array[i])===-1){
res.push(array[i]);
}
}
return res;
}
测试:
3.排序后去重:先对数组进行排序,然后比较元素与其前后相邻元素(只需比较其中一个)是否相同。这种方法的缺点是无法保证原数组的顺序。
function unique(array){
var res=[];
var sortedArr=array.slice(0).sort(); //不能直接对原数组使用sort()方法,因为会修改原数组,slice(0)或concat()不会修改原数组
res.push(sortedArr[0]);
for(var i=1;i<sortedArr.length;i++){
if(sortedArr[i]!==res[res.length-1]){ //将当前元素与上一个元素进行比较
res.push(sortedArr[i]);
}
}
return res;
}
测试:
4.需要隆重介绍的一种方法!代码量最少!使用最简单!唯一的缺点是兼容性!不过有babel转换工具就啥都不担心啦!那就是ES6中的Set()
[...new Set(array)];
来说明一下Set吧,它是ES6提供的一种新的数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值。扩展运算符...可以将右iterator属性的数据转换整一个序列,所以最后是一个数组,去重的数组。
5.这种方法也是用到了ES6的Set以及Array.from()
Array.from(new Set(array));