数组去重

一 . 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);
 
 
 
 
 
 
posted @ 2017-09-25 21:16  comme  阅读(127)  评论(0编辑  收藏  举报