smain  

今天来研究下数组去重的方法,从网上查看了些资料,进行了些整理,把可能会产生错误结果的方法删除了,记录下,加油。

1.第一种方法:思路如下

  (1)新建一个新的数组存放去重的结果。

  (2)for循环中每次从原数组取出一个元素,用这个元素循环与结果数组对比,如果没有重复,则push到新数组中。

  

       Array.prototype.removeRepeat1 = function () {
            var res = [this[0]];
            for (var i = 1; i < this.length; i++) {
                var repeat = false;
                for (var j = 0; j < res.length; j++) {
                    if (this[i] == res[j]) {
                        repeat = true;
                        break;
                    }
                }
                if (!repeat) {
                    res.push(this[i]);
                }
            }
            return res;
        }
        var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0];
        console.log(arr.removeRepeat1());        

2.第二种方法,原理如下

  创建一个新的数组存放结果数组,创建一个空对象来进行判断,for循环时,每次取出一个元素与对象进行对比,

  如果这个元素不重复,则把它存放到结果数组中,同时把这个元素的内容作为对象的一个属性,并赋值为真,存入到第2步建立的对象中。

  

Array.prototype.removeRepeat2 = function(){
        var res = [];
        var json = {};
        for(var i=0;i<this.length;i++){
            if(!json[this[i]]){
                res.push(this[i]);
                json[this[i]] = true;
            }
        }
        return res;
    };
    var arr = [112,112,34,'你好',112,112,34,'你好','str2','str1'];
    console.log(arr.removeRepeat2());

3.第三种方法:直接删除后边重复元素,直接上代码

 

    Array.prototype.removeRepeat3 = function(){
        for(var i=0;i<this.length;i++){
            for(var j=i+1;j<this.length;j++){
                if(this[i] === this[j]){
                    this.splice(j,1);
                    j--;
                }
            }
        }
        return this;
    };
    var arr = [112,112,34,'你好',112,112,34,'你好','str','str1'];
    console.log(arr.removeRepeat3());

 

posted on 2017-04-06 16:46  smain  阅读(555)  评论(0)    收藏  举报