常見問題之數組去重

  如今面試時候,還會時常提到數組去重問題,藉着休息的這幾天本身也總結一下,不求全面只求簡單易懂的幾個去重方法吧。面試

  

Array.prototype.uniqueA = function(){
    var result = [];
    var isRepetition;
    for(var i=0; i<this.length; i++){
        isRepetition = false;
        for(var j=0; j<result.length; j++){
            if(this[i] === result[j]){
                isRepetition = true;
                break;
            }
        }
        if(!isRepetition){
            result.push(this[i]);
        }
    }
    return result;
}

 

  第一個方法是另建一個結果數組,用來存儲原始數組中不重複的數據。遍歷原始數組依次跟結果數組中的元素進行比較,檢測是否重複。數組

Array.prototype.uniqueB = function(){
    var result = [];
    for(var i=0; i<this.length; i++){
        if(result.indexOf(this[i]) == -1){
            result.push(this[i]);
        }
    }
    return result;
}

  第二個方法是比較通俗一下了,用了indexOf方法,indexOf 方法的意思是搜索整個數組中具備給定值的元素,返回找到的第一個元素的索引,沒有找到就返回 -1 。這個代碼也相對的少一些,至於運行效率,這個我不清楚,應該不高。優化

 

Array.prototype.uniqueC = function(){
    var result = [];
    for(var i=0; i<this.length; i++){
        for(var j=i+1; j<this.length; j++){
            if(this[i] === this[j]){
                j = ++i;
            }
        }
        result.push(this[i]);
    }
    return result;
}

第三個方法的原理是第一層從前日後遍歷原始數組,第二層循環是檢測每一個元素是否跟它以後的元素重複,若是它以後有重複元素則跳過它;若是這個元素以後全部元素都跟他不重複了,則把它添加到結果數組中。這個方法實現思路就是:獲取無重複的最右一值添加到結果數組中,這個跟第一種方法相比也優化了第二層的循環,效率要比它高,不過這個方法的結果數組中元素的順序跟原始數組中元素的順序不同了,嘻嘻 能夠本身琢磨下,這個方法我也不是很理解,可是也屬於精簡路線。this

Array.prototype.uniqueD = function(){
    this.sort();
    var result = [this[0]];
    for(var i=1; i<this.length; i++){
        if(this[i] !== result[result.length-1]){
            result.push(this[i]);
        }
    }
    return result;
}

最後一個方法是先把數組進行排序,,而後再進行去重工做。好啦,整理的都是代碼比較短的數組去重方法,但願能幫到大家。spa

相關文章
相關標籤/搜索