javascript——数组去重

版权声明:本文为博主原创文章,未经博主允许不得转载。 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));


猜你喜欢

转载自blog.csdn.net/u012194956/article/details/79508916