JavaScript数组去重的3种方法总结

var aRandomNumberItems = function (n){
        var result = [];
        for (var i = 0;i < n; i++){
            var nRandom = Math.ceil(Math.random()*50);
            result.push(nRandom);
        }
        return result;
    };
    var aRandomNumberItem1 = aRandomNumberItems(50000);
    console.time('time3');
    Array.prototype.distinct3 = function () {
        var arr = [],
            obj = {},
            len = this.length,
            result;
        for (var i = 0; i < len; i++) {
            result = this[i];
            if (!obj[result]) {
                obj[result] = '1';
                arr.push(result);
            }
        }
        return arr;
    }
                       
    aRandomNumberItem1.distinct3();
    console.timeEnd('time3');//结果为4ms
}

var aRandomNumberItems = function (n){
        var result = [];
        for (var i = 0;i < n; i++){
            var nRandom = Math.ceil(Math.random()*50);
            result.push(nRandom);
        }
        return result;
    };
    var aRandomNumberItem1 = aRandomNumberItems(50000);
    console.time('time1')
    Array.prototype.distinct1 = function () {
        this.sort(function (a,b) {
            return a-b;
        })
                   
        for (var i = 0; i < this.length-1; i++){
            if (this[i] === this[i+1]){
                this.splice(i+1,1);
                i--;
            }
        }
        return this;
    }
    aRandomNumberItem1.distinct1();
    console.timeEnd('time1');//结果为1819ms,其中sort占用500ms

var aRandomNumberItems = function (n){
        var result = [];
        for (var i = 0;i < n; i++){
            var nRandom = Math.ceil(Math.random()*50);
            result.push(nRandom);
        }
        return result;
    };
    var aRandomNumberItem1 = aRandomNumberItems(200);
    console.time('time2');
    Array.prototype.distinct2 = function () {
        for (var i = 0; i < this.length-2; i++){
        var nNum1 = this[i];
        for (var j = i + 1;j <this.length-1; j++){
            var nNum2 = this[j];
            if (nNum1 === nNum2){
                this.splice(j,1);
                i--;
            }
        }
    }
    }
    aRandomNumberItem1.distinct2();
    console.timeEnd('time2');//当数组length为50000的时候,浏览器直接卡死了,当length为200时,结果为1834ms,性能太差


知识共享许可协议
《JavaScript数组去重的3种方法总结》常伟华 创作。
采用 知识共享 署名-相同方式共享 3.0 中国大陆 许可协议进行许可。
相邻依据:发表时间
  • 多说评论
  • 签名
  • 新浪微博
  • 默认评论
  • Tab Header 5

0 条评论 / 点击此处发表评论

Tab Content 5

开发技术


开发平台和工具

sitemap     158.05ms