JavaScript之数组去重(2)

Array.prototype.clearRepetitionE = 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;
}

代码D以空间换时间,感觉也就一般般。那么代码E呢?我擦,这代码是错误的吧,这个真的能去重吗?是的,起初我都没看懂这代码,看了解析后又看了一遍之后才明白过来。那么,没看懂的看官也要认真的看解析了:第一层从前往后遍历原始数组,第二层循环是检测每个元素是否跟它之后的元素重复,如果它之后有重复元素则跳过它;如果这个元素之后所有元素都跟他不重复了,则把它添加到结果数组中。这个方法实现思路就是:获取无重复的最右一值添加到结果数组中,这个跟第一种方法相比也优化了第二层的循环,效率要比它高,不过这个方法的结果数组中元素的顺序跟原始数组中元素的顺序不一样了。

看完了代码E解析的你是不是已经伸出了大拇指、投放出了敬佩的目光呢?(这些鲜花和荣誉别给我,应该给写这个方法的大神去)。下面再说最后一个方法:那就是先排序,再去重。老规矩,它叫代码F:

Array.prototype.clearRepetitionF = 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;
}

这个先用数组的排序方法sort进行数组元素排序,然后再进行去重工作。这个效率真的会高吗?哎,没学好算法什么的,我的答案也就三个字:不知道。如果你知道欢迎评论区告诉我。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/0b8ae421b201f5b3b26ac64dc101e1a7.html