数组去重

Posted 爱疯的小疯子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组去重相关的知识,希望对你有一定的参考价值。

   数组去重在前端工作中是必不可少的,接下来我就总结了个人常用的几种方式

一. ES5环境书写

1. 传统方式:效率不是是很高

var data = [1,3,2,1,2];
Array.prototype.unique = function(){
	for(var i=0,arr=[],len=this.length;i<len;i++){
		var item = this[i];
		if(arr.indexOf(item) == -1) arr.push(item);
	}
	return arr;
};
Array.prototype.indexOf = function(n){
	for(var i=0,len=this.length;i<len;i++){
		if(this[i] == n) return i; 
	}
	return -1;
};
console.log(data.unique());

2.通过模拟map的hash存储方式:效率优于1

var data = [1,3,2,1,2];
Array.prototype.unique = function(){
	for(var i=0,r={},n=[],len=this.length;i<len;i++){
		if(!r[this[i]]){
			r[this[i]] = true;
			n.push(this[i]);
		}  
	}
	return n;
};
console.log(data.unique());

3.通过indexOf判断数组元素第一次出现的位置是否为当前位置来实现:效率是2的两倍,推荐

var data = [1,3,2,1,2];
Array.prototype.unique = function(){
var arr = [this[0]];
     //从第二项开始遍历 for(var i=1,len=this.length;i<len;i++){
//如果当前数组元素在数组中出现的第一次位置不是i,说明是重复元素 if(this.indexOf(this[i]) == i) arr.push(this[i]); } return arr; }; console.log(data.unique());

 

二. ES6环境

通过Set数据结构中,无重复元素的特性来实现:比较推崇

var data = [1,3,2,1,2];
let arr = [...new Set(data)];
console.log(arr);

 

以上是关于数组去重的主要内容,如果未能解决你的问题,请参考以下文章

C/C++系列数组去重代码实现

C/C++系列数组去重代码实现

C/C++系列数组去重代码实现

用最简短的代码搞定数组去重

php 多个 一维数组 去重 组成新数组

ES6 - 一条代码实现数组去重