数组去重
一 . 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(){<br> var arr = [this[0]];<br> //从第二项开始遍历 for(var i=1,len=this.length;i<len;i++){<br> //如果当前数组元素在数组中出现的第一次位置不是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);

浙公网安备 33010602011771号