数组去重二则

前端攻城狮学习笔记五:继承、原型、setInterval、数组去重一文中数组去重的题目,我想到的两种做法,记录之

两种方法都是直接操纵原始数组,未创建新数组,以提高性能

Array.prototype.distinct = function(){
    for(var i = 0, l = this.length; i < l; i++){
        var currentItem = this[i];
        var j = i + 1;
        while(j < l){
	        var nextItem = this[j];
	        if(currentItem == nextItem){
	            this.splice(j, 1);
	            l--;
	            j--;
	        }
	        j++;
        }
    }
    return this;
}

后面这种方法存在的问题,lastIndexOf是JS1.6新增的,之前版本的不一定支持(From 菜鸟程序猿

Array.prototype.distinct = function(){
    var undefinedFlag = false;
    for(var i = 0, l = this.length; i < l; i++){
        var currentItem = this[i];
        // 只保留第一个undefined数组元素
        if(undefinedFlag && currentItem === void 0){
            this.splice(i, 1);
            l--;
            i--;
            continue;
        }
        // 找当前元素的最后一个重复元素
        var lastRepeatIndex = this.lastIndexOf(currentItem);
        while(lastRepeatIndex > i){
            // 删除重复元素
            this.splice(lastRepeatIndex, 1);
            // 继续找当前元素的最后一个重复元素
            lastRepeatIndex = this.lastIndexOf(currentItem);
            // 数组长度-1
            l--;
        }
    }
    return this;
}
posted @ 2012-07-09 09:47  alongg  阅读(227)  评论(0编辑  收藏  举报